Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
1

Ругается на "cmd.ExecuteNonQuery();"

09.06.2013, 15:30. Показов 4114. Ответов 35
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Прошу помощь, так как сам уже просто отчаялся!
есть хранимая процедура:
T-SQL
1
2
3
4
5
6
7
8
9
10
CREATE PROCEDURE [dbo].[InsPrib]
    @tk nvarchar(50),
    @treck nvarchar(50)
AS
    INSERT INTO Прибыло
              ([tk]
          ,[treck])
    VALUES 
         (@tk
         ,@treck)
и есть на форме : dataGirdView1 и textBox2
А так же есть кнопка button1
Так вот как правильно реализовать по нажатию кнопки передачу параметров в хранимую процедуру (@tk nvarchar(50), @treck nvarchar(50)) где значение tk нужно взять из textBox2, а значения treck из dataGirdView1
Пример моего кода (тут при выполнении ругается на "cmd.ExecuteNonQuery();" :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 private void button1_Click(object sender, EventArgs e)
        {
            string store = "dbo.InsPrib";
            using (SqlConnection connection = new SqlConnection(@"Data Source=(localdb)\Projects;Initial Catalog=Skladvpekine;Integrated Security=True;Pooling=False;Connect Timeout=30"))
            
            {
                SqlCommand cmd = new SqlCommand(store, connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "dbo.InsPrib";
                cmd.Parameters.AddWithValue("@tk", textBox2.Text);
                cmd.Parameters.AddWithValue("@treck", dataGridView1.Rows);
                SqlParameter tk = new SqlParameter("@tk", SqlDbType.NVarChar, 50);
                SqlParameter treck = new SqlParameter("@treck", SqlDbType.NVarChar, 50);
                connection.Open();
                cmd.ExecuteNonQuery();
                connection.Close();
 
 
 
            }
        }
Буду рад отблагодарить любого кто поможет!
Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2013, 15:30
Ответы с готовыми решениями:

При попытке записать в новую строку из textbox ругается на inscmd.ExecuteNonQuery
При попытке записать в новую строку An unhandled exception of type 'System.ArgumentException'...

Программа ругается на cmd.ExecuteNonQuery()
Здравствуйте. Подскажите пожалуйста, где у меня ошибка в коде(ругается на cmd.ExecuteNonQuery())....

Ругается на ExecuteNonQuery();
string card = "TransistorCard"; sqlConnection.Open(); using (var...

cmd.ExecuteNonQuery();
Здравствуйте. Кто разбирается, помогите пожалуйста. нажимаю на кнопку изменить, выходит эта...

Ошибка в cmd.ExecuteNonQuery()
Здравствуйте, я написал следующий код для добавления информации в локальную БД: int...

35
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
09.06.2013, 16:00 2
вы бы посмотрели что у вас в dataGridView1.Rows, и всё стало понятно
1
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
09.06.2013, 17:03  [ТС] 3
Цитата Сообщение от Монфрид Посмотреть сообщение
вы бы посмотрели что у вас в dataGridView1.Rows, и всё стало понятно

Извините, я не совсем понял...
Что именно сделать нужно?
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
10.06.2013, 06:35 4

Не по теме:

Вот она, "строгая типизация" C#. Можно в параметр хранимой процедуру хоть форму целиком передать, а компилятор даже предупреждения не выдаст.


Более чем уверен, что Exception, который возникает при выполнении метода ExecuteNonQuery, говорит о том, что он не может преобразовать параметр @trek к типу NVARCHAR. Это происходит из-за того, что вы в качестве параметра @trek передаете не строку, а DataGridViewRowCollection. Собственно, об этом вам и сказал Монфрид, только не напрямую, а намеком.
1
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
10.06.2013, 16:30  [ТС] 5
Цитата Сообщение от kodv Посмотреть сообщение

Не по теме:

Вот она, "строгая типизация" C#. Можно в параметр хранимой процедуру хоть форму целиком передать, а компилятор даже предупреждения не выдаст.


Более чем уверен, что Exception, который возникает при выполнении метода ExecuteNonQuery, говорит о том, что он не может преобразовать параметр @trek к типу NVARCHAR. Это происходит из-за того, что вы в качестве параметра @trek передаете не строку, а DataGridViewRowCollection. Собственно, об этом вам и сказал Монфрид, только не напрямую, а намеком.
Спасибо) Теперь дошло до жирафа)
Но теперь возникает другой вопрос: как в этот параметр @treck передать все значения из столбца treck (он под индексом 1)
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
10.06.2013, 16:36 6
Вы подумайте чуть чуть, как вы в хранимую процедуру, в один параметр запихнете сразу же несколько значений? это для каждого значения отдельно вызывать хранимую процедуру тогда, по другому никак =) Ну конечно можно извратиться через программирования на sql, но не стоит, что хранимка делать должна?
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
10.06.2013, 17:05 7
Цитата Сообщение от nubiara Посмотреть сообщение
как в этот параметр @treck передать все значения из столбца treck
Плохая мысль. 23Alex24 уже ответил, как правильно делать надо. Дополню. Пришло время Вам познакомиться с DataAdapter'ом:
- Использование DataAdapter'а, а заодно еще и DataReader'а.
- Обновление источников данных с помощью DataAdapter'а.
1
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
10.06.2013, 17:22  [ТС] 8
Цитата Сообщение от kodv Посмотреть сообщение
Плохая мысль. 23Alex24 уже ответил, как правильно делать надо. Дополню. Пришло время Вам познакомиться с DataAdapter'ом:
- Использование DataAdapter'а, а заодно еще и DataReader'а.
- Обновление источников данных с помощью DataAdapter'а.
Опять же мои благодарности)
Т.е хранимую процедуру отбрасываю, так?
А можете показать, как реализовать с помощью этих методов, поставленную задачу, по нажатию кнопки?)
Задергал я уже Вас, наверное..
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
10.06.2013, 17:30 9
Вы бы прочитали сначала инфомрацию по ссылкам. DataAdapter содержит в себе четыре команды (на каждое действие по команде) и коннекшн. INSERT-команда у DataAdapter - это будет ваша ХП. Останется только скормить DataAdapter'у вашу DataTable, для того, чтобы он вставил новые записи в БД. В процессе изучения материала вы найдете массу примеров. Поэтому не поленитесь, почитайте. Нет смысла писать приложения БД, используя ADO.NET, если нет понимания механизма этого ADO.NET.
1
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
10.06.2013, 23:25  [ТС] 10
Цитата Сообщение от kodv Посмотреть сообщение
Вы бы прочитали сначала инфомрацию по ссылкам. DataAdapter содержит в себе четыре команды (на каждое действие по команде) и коннекшн. INSERT-команда у DataAdapter - это будет ваша ХП. Останется только скормить DataAdapter'у вашу DataTable, для того, чтобы он вставил новые записи в БД. В процессе изучения материала вы найдете массу примеров. Поэтому не поленитесь, почитайте. Нет смысла писать приложения БД, используя ADO.NET, если нет понимания механизма этого ADO.NET.
Спасибо, действительно, стоило прочитать, вначале)
уже разобрался)
Простите, просто уже просто в отчаянии был!)

Добавлено через 3 часа 38 минут
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Вы подумайте чуть чуть, как вы в хранимую процедуру, в один параметр запихнете сразу же несколько значений? это для каждого значения отдельно вызывать хранимую процедуру тогда, по другому никак =) Ну конечно можно извратиться через программирования на sql, но не стоит, что хранимка делать должна?
Не сразу заметил)
Хранимка должна записывать в БД, в идеале, каждое значение ячейки из Колонки treck, но достаточно необычным образом, т.е в таблице должна создаваться каждый раз новая строка содержащие значение из textBox'а (оно всегда одинаковым будет) и каждое значение ячейки из Колонки treck...как то так...

Добавлено через 1 минуту
Цитата Сообщение от kodv Посмотреть сообщение
Вы бы прочитали сначала инфомрацию по ссылкам. DataAdapter содержит в себе четыре команды (на каждое действие по команде) и коннекшн. INSERT-команда у DataAdapter - это будет ваша ХП. Останется только скормить DataAdapter'у вашу DataTable, для того, чтобы он вставил новые записи в БД. В процессе изучения материала вы найдете массу примеров. Поэтому не поленитесь, почитайте. Нет смысла писать приложения БД, используя ADO.NET, если нет понимания механизма этого ADO.NET.
Я все же видно совсем тупой, раз не понимаю, как вызвать это действие по нажатию button1(((((

Добавлено через 30 минут
А Вообще если кто поможет написать код для кнопки, то я ничего не пожалею...
уже просто голова кругом!
0
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
11.06.2013, 06:29 11
По итогу все должно закончится такой строкой:
C#
1
myDataAdapter.Update(myDataTable); // myDataTable - это DataTable, которая привязана к DataGridView
Пробуйте писать. Если не получится, то тогда уж кидайте нароботки сюда с комментариями, что не получается. Исправить ошибку в готовом коде гораздо проще, чем писать этот код целиком не зная ни предметной области, ни архитектуры приложения.
1
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
11.06.2013, 08:11 12
А вообще возникает вопрос нужна ли вообще эта хранимка может имеет смысл просто делать insert, а так вообще для каждой новой записи надо вызывать отдельно, либо как вам советовали через адаптер, есть еще такая штука как LINQ to SQL, если будет время почитайте про нее тоже=)
1
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
11.06.2013, 21:13  [ТС] 13
C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e)
        {
            SkladvpekineDataSetTableAdapters.QueriesTableAdapter tableAdapter = new SkladvpekineDataSetTableAdapters.QueriesTableAdapter();
            int rowsAffected = tableAdapter.InsPrib( А ВОТ ТУТ СТУПОР )
         }
Ведь мне из DataGirdView нужно перенести значения столбца treck нажатием кнопки
(Уже просто стыдно за свою тупость)
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
13.06.2013, 06:09 14
InsPrib это ваш метод какой-то?
0
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
13.06.2013, 16:41  [ТС] 15
Цитата Сообщение от 23Alex24 Посмотреть сообщение
InsPrib это ваш метод какой-то?
Это хранимка моя
Она из выпадающего списка мне выскочила...
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
13.06.2013, 16:56 16
Ну, возможно вам туда надо передать набор параметров, в этом ваш ступор был?)
0
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
13.06.2013, 17:58  [ТС] 17
Цитата Сообщение от 23Alex24 Посмотреть сообщение
Ну, возможно вам туда надо передать набор параметров, в этом ваш ступор был?)
Да))))))))

Но значения из DataGird View
из 1 колонки))
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
14.06.2013, 08:16 18
ну у грида должна быть коллекция columns или rows, там через индексы в общем можно к ячейкам получить доступ =)
1
0 / 0 / 0
Регистрация: 07.06.2013
Сообщений: 21
15.06.2013, 00:52  [ТС] 19
Цитата Сообщение от 23Alex24 Посмотреть сообщение
ну у грида должна быть коллекция columns или rows, там через индексы в общем можно к ячейкам получить доступ =)
Пробовал))
нельзя получить значения всех ячеек....
Вот хоть убейся..
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
15.06.2013, 10:01 20
ну само собой там придется использовать цикл или что-то на подобие =) суть задачи скажите, чтобы лишний раз вас не тормошить и стало более менее понятно что надо сделать - хотя бы чуть чуть расскажите что пытаетесь сделать и для чего, возможно вы где-то подход не правильный выбрали
1
15.06.2013, 10:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2013, 10:01
Помогаю со студенческими работами здесь

Foreach + cmd.ExecuteNonQuery()
Господа, помогите :scratch: Есть массив, форичем проверяю значение элемента массива и при true...

Почему cmd ругается на %?
Rem You have to pass path triples: action arg0 arg1. Rem Action could be one of the following...

Почему cmd при запуска данного .bat файла ругается на %?
Почему cmd при запуске данного .bat файла ругается на %? Rem This .bat file allows you to...

Почему vk ругается на бесплатные хостинги? На какие не ругается?
Здравствуйте, Что нужно сделать, чтобы vk не ругался на бесплатный хостинг? Я нашёл отличный...

Ошибка в ExecuteNonQuery()
Подскажите пожалуйста при изменении базы данных возникла ошибка ExecuteNonQuery(), как ее исправить...


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

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