Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
illuzia
1

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

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

Author24 — интернет-сервис помощи студентам
Немогли бы вы подсказать, как правильно написать запрос в 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();
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2010, 22:01
Ответы с готовыми решениями:

Не выполняется SQL запрос
Есть обработчик события нажатия кнопки, в котором выполняется следующий код: protected void...

SQL запрос не выполняется
Всем привет, пишу в С++ Builder XE2 . Была задача в Edit dropапть имя и фамилию из списка treeview...

Не выполняется SQL-запрос
Подскажите, не выполняется sql зарос по кнопке. procedure TMainForm.Button1Click(Sender:...

Не выполняется запрос к SQL
Не получается правильно составить запрос для SQL суть такова. Есть DataGridView в котором...

7
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
07.09.2010, 00:07 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();
0
illuzia
07.09.2010, 21:24 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();
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
08.01.2017, 21:14 4
ап теме.у меня точно такая же проблема ,ошибка в такой же строке reader2 = cmd2.ExecuteReader();
вложенного цикла,нид хэлп.
0
784 / 615 / 273
Регистрация: 04.08.2015
Сообщений: 1,707
09.01.2017, 00:33 5
https://msdn.microsoft.com/ru-... 10%29.aspx
"Имейте в виду, что пока объект DataReader открыт, соединение Connection используется исключительно этим объектом DataReader. Невозможно выполнять какие-либо команды для Connection, включая создание другого объекта DataReader, пока исходный объект DataReader не будет закрыт."
Так что проблему можно решить созданием еще одного Connection. Хотя скорее всего вам просто нужен грамотно написанный sql-запрос, и тогда 2-й DataReader не понадобится.
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
09.01.2017, 12:34 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 на инсерте забыл и все норм стало на ридере.
0
0 / 0 / 1
Регистрация: 29.04.2015
Сообщений: 3
15.01.2017, 01:34 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"]);// <---на этом моменте вылетает
    }
0
784 / 615 / 273
Регистрация: 04.08.2015
Сообщений: 1,707
15.01.2017, 13:00 8
Цитата Сообщение от kot685 Посмотреть сообщение
C#
1
2
adapter.UpdateCommand = new SqlCommand("UPDATE NewZakaz SET [Откуда] = @FZZZ,[Куда]=@Where,[Состояние]=@Cond,[Стоимость]=@Cost WHERE [Телефон] = @Phon", connection);
adapter.InsertCommand.Parameters.Clear();
Копипаст-зло) Параметры нужно добавлять в UpdateCommand.
0
15.01.2017, 13:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2017, 13:00
Помогаю со студенческими работами здесь

Не выполняется SQL-запрос
При нажатии на кнопку должно происходить обновление данных в БД. Однако оно не происходит, пусть...

SQL server - ни одна из команд не выполняется, ошибок нет
Доброе время суток всем. помогите пожалуйста настроить базу данныхю дело вот вчем при наборе...

Почему не выполняется SQL запрос?
Здравствуйте! Подскажите, почему не выполняется SQL-запрос к базе данных $connect = new...

SQL запрос выполняется 90 секунд
Привет ребят. Такая проблема. Есть запрос, который агрегирует данные из 10 таблиц, в итоге он...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru