Форум программистов, компьютерный форум CyberForum.ru

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
illuzia
Сообщений: n/a
#1

Не выполняется запрос в MS SQL Server - C#

06.09.2010, 22:01. Просмотров 1709. Ответов 7
Метки нет (Все метки)

Немогли бы вы подсказать, как правильно написать запрос в SQL Server на C#, приведенный ниже код, в VB работает без особых проблем, но в C# выдает ошибку и ссылает на то что, --reader-- должен быть закрыт. Есле же запросы поставить последовательно, то они выполняются, но только для последнего элемента 1 цикла --reader--, а необходимо чтобы 2 цикл --reader2-- выполнялся для всех элементов 1 цикла --reader--.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
String connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
SqlConnection cnn = new SqlConnection(connetionString);
cnn.Open();
 
String sql = "Select * from product";
SqlCommand cmd = new SqlCommand(sql, cnn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
   Int32 nn = reader[0].toString().Trim();
   String name = reader[1].toString().Trim();
 
   sql2 = "Select * from product where data=" + nn;
   cmd2 = new SqlCommand(sql2, cnn);
   reader2 = cmd2.ExecuteReader();
   while (reader2.Read())
   {
      String data = reader2[0].toString().Trim();
   }
   reader2.Close();
 
   Console.WriteLine("Название товара: " + name + " , последняя дата поступления: " + data);
}
reader.Close();
 
cnn.Close();
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kirill29
2051 / 1214 / 55
Регистрация: 01.02.2009
Сообщений: 2,842
07.09.2010, 00:07     Не выполняется запрос в MS SQL Server #2
Напишите, какую именно ошибку выдает студия (если пишете в студии).
И у вас код вообще работает? Мне кажется, что нет.
Вот немного переделал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
String connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
SqlConnection cnn = new SqlConnection(connetionString);
cnn.Open();
 
String sql = "Select * from product";
SqlCommand cmd = new SqlCommand(sql, cnn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
   Int32 nn = reader.GetInt32(0);
   String name = reader.GetString(1);
 
   sql2 = "Select * from product where data=" + nn;
   cmd2 = new SqlCommand(sql2, cnn);
   reader2 = cmd2.ExecuteReader();
   while (reader2.Read())
   {
      String data = reader2.GetString(0);
   }
   reader2.Close();
 
   Console.WriteLine("Название товара: " + name + " , последняя дата поступления: " + data);
}
reader.Close();
cnn.Close();
illuzia
Сообщений: n/a
07.09.2010, 21:24     Не выполняется запрос в MS SQL Server #3
Работаю в MSVS2010. Приведенный мною код полностью рабочий, но при условии что внутренний запрос удален или закоментирован.
C#
1
2
3
4
5
6
7
8
sql2 = "Select * from product where data=" + nn;
   cmd2 = new SqlCommand(sql2, cnn);
   reader2 = cmd2.ExecuteReader();
   while (reader2.Read())
   {
      String data = reader2[0].toString().Trim();
   }
   reader2.Close();
Но если оставить как было, то при выполнение программы выдается выдается сообщение "There is already an open DataReader associated with this Command which must be closed first." (Запрос уже открыт и должен быть сначала закрыт).

Ошибка происходит при обработке вот этой строки:
C#
1
reader2 = cmd2.ExecuteReader();
Zmitrik
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
08.01.2017, 21:14     Не выполняется запрос в MS SQL Server #4
ап теме.у меня точно такая же проблема ,ошибка в такой же строке reader2 = cmd2.ExecuteReader();
вложенного цикла,нид хэлп.
Igr_ok
303 / 290 / 100
Регистрация: 04.08.2015
Сообщений: 741
09.01.2017, 00:33     Не выполняется запрос в MS SQL Server #5
https://msdn.microsoft.com/ru-ru/lib...vs.110%29.aspx
"Имейте в виду, что пока объект DataReader открыт, соединение Connection используется исключительно этим объектом DataReader. Невозможно выполнять какие-либо команды для Connection, включая создание другого объекта DataReader, пока исходный объект DataReader не будет закрыт."
Так что проблему можно решить созданием еще одного Connection. Хотя скорее всего вам просто нужен грамотно написанный sql-запрос, и тогда 2-й DataReader не понадобится.
Zmitrik
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
09.01.2017, 12:34     Не выполняется запрос в MS SQL Server #6
До перевода базы на локальный mdf я пользовал базу access и oledb,там это работало ,ну а тут неважно походу что файл локальный,но суть ясна,или надо сделать объеденный sql без подцикла или создавать второй коннект для datareader

Добавлено через 3 часа 20 минут
спс за ответ,разобрался

Добавлено через 1 час 46 минут
тогда столкнулся с еще одним косяком мс sql
datareader возвращает вопросы вместо русских букв где sql по индексу
string folder = rdr_f["name_folders"].ToString(); вернет ????????
где выбор по строке надо подставлять where name=N'123' и норм,
а вот как быть когда ридером разбираются данные извлеченные по индексу типа Select * from mailbox where id=2. и потом string folder = rdr_f["name_folders"].ToString(); вернет ????????

Добавлено через 12 минут
Nvarchar у столбца если что

Добавлено через 27 минут
про букву N на инсерте забыл и все норм стало на ридере.
kot685
0 / 0 / 1
Регистрация: 29.04.2015
Сообщений: 3
15.01.2017, 01:34     Не выполняется запрос в MS SQL Server #7
Помогите, люди добрые
Вылетает ошибка "Первый этап обработки исключения типа "System.Data.SqlClient.SqlException" в System.Data.dll

Дополнительные сведения: Must declare the scalar variable "@FZZZ". " при попытке обновить базу Фрагмент кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
dataSet = new DataSet(); //create adapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand("SELECT Id, Телефон, Откуда, Куда, Состояние, Стоимость FROM NewZakaz", connection);
 
        adapter.InsertCommand = new SqlCommand("INSERT INTO NewZakaz (Телефон, Откуда, Куда, Состояние, Стоимость) Values(@Phon,@FZZZ,@Where, @Cond, @Cost)", connection);
        adapter.InsertCommand.Parameters.Add("@Phon", SqlDbType.NVarChar, 50, "Телефон");
        adapter.InsertCommand.Parameters.Add("@FZZZ", SqlDbType.NVarChar, 50, "Откуда");
        adapter.InsertCommand.Parameters.Add("@Where", SqlDbType.NVarChar, 50, "Куда");
        adapter.InsertCommand.Parameters.Add("@Cond", SqlDbType.NVarChar, 50, "Состояние");
        adapter.InsertCommand.Parameters.Add("@Cost", SqlDbType.NVarChar, 50, "Стоимость");
 
        adapter.UpdateCommand = new SqlCommand("UPDATE NewZakaz SET [Откуда] = @FZZZ,[Куда]=@Where,[Состояние]=@Cond,[Стоимость]=@Cost WHERE [Телефон] = @Phon", connection);
        adapter.InsertCommand.Parameters.Clear();
        adapter.InsertCommand.Parameters.Add("@Phon", SqlDbType.NVarChar, 50, "[Телефон]");
        adapter.InsertCommand.Parameters.Add("@FZZZ", SqlDbType.NVarChar, 50, "[Откуда]");
        adapter.InsertCommand.Parameters.Add("@Where", SqlDbType.NVarChar, 50, "[Куда]");
        adapter.InsertCommand.Parameters.Add("@Cond", SqlDbType.NVarChar, 50, "[Состояние]");
        adapter.InsertCommand.Parameters.Add("@Cost", SqlDbType.NVarChar, 50, "[Стоимость]");
 
 
        //read table Customers from DB to DataSet
        adapter.Fill(dataSet, "NewZakaz");
 
        //Create DGV and assign DataTable
        var dgv = new DataGridView { Parent = this, Dock = DockStyle.Fill, DataSource = dataSet.Tables["NewZakaz"] };
        //adapter.InsertCommand.Parameters.Clear();
    }
 
    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
 
        //save changes when form is closing
        adapter.Update(dataSet.Tables["NewZakaz"]);// <---на этом моменте вылетает
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2017, 13:00     Не выполняется запрос в MS SQL Server
Еще ссылки по теме:
C# Как правильно составить запрос к SQL Server?
C# Создать запрос INSERT в базу SQL Server
C# Запрос из базы возвращает в reader значение поля типа date как datetime +MS SQL Server 2008
Как перекатить с sql server на другой sql server C#
C# Запрос к MySQL. Через WorkBench запрос выполняется, а через клиента - нет

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Igr_ok
303 / 290 / 100
Регистрация: 04.08.2015
Сообщений: 741
15.01.2017, 13:00     Не выполняется запрос в MS SQL Server #8
Цитата Сообщение от kot685 Посмотреть сообщение
C#
1
2
adapter.UpdateCommand = new SqlCommand("UPDATE NewZakaz SET [Откуда] = @FZZZ,[Куда]=@Where,[Состояние]=@Cond,[Стоимость]=@Cost WHERE [Телефон] = @Phon", connection);
adapter.InsertCommand.Parameters.Clear();
Копипаст-зло) Параметры нужно добавлять в UpdateCommand.
Yandex
Объявления
15.01.2017, 13:00     Не выполняется запрос в MS SQL Server
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru