Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

06.09.2010, 22:01. Просмотров 1860. Ответов 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();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2010, 22:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не выполняется запрос в MS SQL Server (C#):

.NET 4.x Не выполняется SQL запрос - C#
Есть обработчик события нажатия кнопки, в котором выполняется следующий код: protected void btn_save_work_time_Click(object sender,...

Не выполняется запрос к SQL - C#
Не получается правильно составить запрос для SQL суть такова. Есть DataGridView в котором необходимо считывать 1 строку и менять в другой...

Sql compact долго выполняется запрос - C#
Всем привет. База sql compact около 1.5 млн записей, все нужные индексы есть. Когда запрос выполняется в отдельном потоке очень...

Не выгружаются данные в textbox1 и не выполняется SQL-запрос - C#
Здравия желаю Уважаемые Форумчане! Пишу программку (для товарища), кое какие знания я имею, а он нет :( Нужно завести 1000...

Не работает запрос по БД SQL Server - C#
Всем привет! Не могу понять, почему не выполняется запрос... В таблице у меня 1 запись, но он её как-то не находит что-ли.. Мне надо...

Запрос на добавление строки в SQL server - C#
Делаю запрос на добавление записи в БД SQL server: connection.Open(); string commandString =...

7
kirill29
2061 / 1224 / 55
Регистрация: 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
0 / 0 / 0
Регистрация: 03.09.2010
Сообщений: 2
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
Zmitrik
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 10
08.01.2017, 21:14 #4
ап теме.у меня точно такая же проблема ,ошибка в такой же строке reader2 = cmd2.ExecuteReader();
вложенного цикла,нид хэлп.
0
Igr_ok
358 / 345 / 127
Регистрация: 04.08.2015
Сообщений: 900
09.01.2017, 00:33 #5
https://msdn.microsoft.com/ru-ru/library/haa3afyz%28v=vs.110%29.aspx
"Имейте в виду, что пока объект DataReader открыт, соединение Connection используется исключительно этим объектом DataReader. Невозможно выполнять какие-либо команды для Connection, включая создание другого объекта DataReader, пока исходный объект DataReader не будет закрыт."
Так что проблему можно решить созданием еще одного Connection. Хотя скорее всего вам просто нужен грамотно написанный sql-запрос, и тогда 2-й DataReader не понадобится.
0
Zmitrik
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
kot685
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
Igr_ok
358 / 345 / 127
Регистрация: 04.08.2015
Сообщений: 900
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2017, 13:00
Привет! Вот еще темы с ответами:

Не работает запрос INSERT к БД SQL Server - C#
Здравствуйте! Помогите, пожалуйста, разобраться с запросом INSERT. Создал базу данных, ввел две записи. Далее пытаюсь вставить запись...

Создать запрос INSERT в базу SQL Server - C#
connect.ConnectionString = &quot;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\&quot;Отстойник для проектов\&quot;АПЛ_ФРОНТОН.MDF&quot;; ...

Как правильно составить запрос к SQL Server? - C#
всем привет! программа должна по нажатию кнопки писать в базу данных: this.textBox2.Text = &quot;1&quot;; ...

Настройка SQL Server 2008 для работы с SQL Server Management Studio - C#
Доброго времени суток. Подскажите пожалуйста, что нужно сделать для того, чтобы SQL Server Management Studio соединялось с SQL сервером ?...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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