Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > как выполнить SQL запрос


Автор: Ch0bits 16.6.2005, 21:40
Как выполнить над базой данных запрос содержищийся в массиве строк?
Тип базы не имеет значения.
smile

Автор: Domestic Cat 16.6.2005, 21:48
В чем проблема-то? Ну для каждой строки делаешь что-нибудь типа
Код

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

Автор: Ch0bits 16.6.2005, 22:27
Не... это я наверное не точно вопрос сформулировал.
Мне ведь не нужно выполнять последовательно каждую строку, мне нужно выполнить все их вместе.
В массиве содержится многострочная программа на SQL.

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

Автор: Domestic Cat 17.6.2005, 07:45

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

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

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

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

Для SQL Server можно пользоваться биб-кой SQL-DMO. http://forum.vingrad.ru/index.php?showtopic=55624 я клал простой класс, инкапуслирующий работу с SQL-DMO.

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

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

Автор: Ch0bits 18.6.2005, 00:14
Тут такая злая тема: smile

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

Вот такие прироги с котятами... smile smile smile

Автор: Domestic Cat 18.6.2005, 03:17
Ну я думаю так: разделяешь запросы точкой с запятой, выполняешь 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));
                }

            }
        }


Автор: Ch0bits 18.6.2005, 21:17
Навёл меня на правильный путь.
После кое-каких добавок-поправок работает отлично!
RESPECT!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)