Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как выполнить SQL запрос, string[] 
:(
    Опции темы
Ch0bits
  Дата 16.6.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Как выполнить над базой данных запрос содержищийся в массиве строк?
Тип базы не имеет значения.
smile
PM WWW   Вверх
Domestic Cat
Дата 16.6.2005, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 1
Всего: 172



В чем проблема-то? Ну для каждой строки делаешь что-нибудь типа
Код

IDbCommand sqlCmd = sqlCon.CreateCommand();      
sqlCmd.CommandType = CommandType.Text;
foreach(string stringCommand in myArray)
{
    sqlCmd.CommandText = stringCommand;          
    sqlCmd.ExecuteNonQuery();
}



--------------------

PM   Вверх
Ch0bits
Дата 16.6.2005, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Не... это я наверное не точно вопрос сформулировал.
Мне ведь не нужно выполнять последовательно каждую строку, мне нужно выполнить все их вместе.
В массиве содержится многострочная программа на SQL.
PM WWW   Вверх
mr.DUDA
Дата 17.6.2005, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Обычно такая штука, как многострочный запрос, оформляется в виде хранимой процедуры и вызывается по имени.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 17.6.2005, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 1
Всего: 172




Вроде batch вводится в ADO.NET 2.0 или я ошибаюсь?


--------------------

PM   Вверх
arilou
Дата 17.6.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(Vadim999 @ 16.6.2005, 21:40)
Как выполнить над базой данных запрос содержищийся в массиве строк?

Если в запросе у тебя только CRUD операции, то можешь спокойно выполнять его, разделив ";" разные запросы (работает в SQL Server, в Access'e - нет).

Если там у тебя DDL, то придется разбивать его на пачки, и после каждой пачки вставлять вызов "GO", иначе если ты в новые таблицы начнешь добавлять, будут ошибки о том, что твоих изменений еще нет.

Для SQL Server можно пользоваться биб-кой SQL-DMO. Тут я клал простой класс, инкапуслирующий работу с SQL-DMO.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Дрон
Дата 17.6.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 5
Всего: 93



Цитата(Vadim999 @ 16.6.2005, 22:40)
Как выполнить над базой данных запрос содержищийся в массиве строк?

Не понял проблемы? Приведи пример такого запроса.


--------------------
Да. Именно так.
PM   Вверх
Ch0bits
Дата 18.6.2005, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Тут такая злая тема: smile

Этот массив строк есть загруженный внешний текстовый файл с запросом. Он генерируется программой стороннего разработчика и часто изменяется. Поэтому пример привести не могу, да и не имеет он тут значения.
Если бы я заранее знал текст SQL, то просто засунул бы его в базу и вызывал из проги как процедуру.

Вот такие прироги с котятами... smile smile smile
PM WWW   Вверх
Domestic Cat
Дата 18.6.2005, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 1
Всего: 172



Ну я думаю так: разделяешь запросы точкой с запятой, выполняешь executeReader, и для каждого запроса, возвращаещуего че-нибудь перебираешь результаты. К примеру

Код

using (SqlConnection con = new SqlConnection()) {

            con.ConnectionString = "Data Source = localhost;" + 
                "Database = Northwind; Integrated Security=SSPI";
            SqlCommand com = con.CreateCommand();
            com.CommandType = CommandType.Text;
            com.CommandText = "SELECT BirthDate,FirstName,LastName FROM " +
                "Employees ORDER BY BirthDate; SELECT * FROM Employees";
            con.Open();

            using (SqlDataReader reader = com.ExecuteReader()) {

                while (reader.Read()) { // <-- Обрабатываем первый запрос
                    Console.WriteLine("{0,18:D} - {1} {2}", 
                        reader[0], 
                        reader[1],   
                        reader[2]);             
                }

                reader.NextResult();  // <-- Обрабатываем запрос SELECT * FROM Employees

                for (int field = 0; field < reader.FieldCount; field++) {

                    Console.WriteLine("  Column Name:{0}  Type:{1}",
                        reader.GetName(field), 
                        reader.GetDataTypeName(field));
                }

            }
        }




--------------------

PM   Вверх
Ch0bits
Дата 18.6.2005, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Навёл меня на правильный путь.
После кое-каких добавок-поправок работает отлично!
RESPECT!
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0775 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.