Boopalslm Ответов: 1

Необходимо объявить скалярную переменную "@customer".


I am creating windows application using c# 2010, here i am using data grid view for billing purpose, but save the grid view values to data base below error is came 

Must declare the scalar variable "@customer".
 
 SqlCommand cmd2 = new SqlCommand("update stkdetails set customer=customer+@customer" + rows.Cells[7].Value + " where empname='" + rows.Cells[2].Value + "'and date='" + txtdate.Text + "'", con2);


any one give me some ideas how to solve above error


Что я уже пробовал:

Необходимо объявить скалярную переменную "@customer".

1 Ответов

Рейтинг:
0

Midi_Mick

Вы создаете параметры и добавляете их в объект SQLCommand:

SqlCommand cmd2 = new SqlCommand("update stkdetails set customer=customer+@customer where empname='" + rows.Cells[2].Value + "'and date='" + txtdate.Text + "'", con2);
cmd2.Parameters.AddWithValue("@customer", rows.Cells[7].Value);

Я бы тоже сильно предлагаю вам настроить параметры для @empname и @date одновременно.
SqlCommand cmd2 = new SqlCommand("update stkdetails set customer=customer+@customer where empname=@empname and date=@date", con2);
cmd2.Parameters.AddWithValue("@customer", rows.Cells[7].Value);
cmd2.Parameters.AddWithValue("@empname", rows.Cells[2].Value);
cmd2.Parameters.AddWithValue("@date", txtDate.Text);


Boopalslm

Я пробую ваш код, но ниже ошибка пришла

Параметризованный запрос '(@customer nvarchar(4000),@empname nvarchar(4000),@date nvarchar' ожидает параметр '@customer', который не был указан.

как решить вышеприведенную ошибку. дайте мне несколько идей

Midi_Mick

Что это за поле-клиент? Это текст или цифра? И что вы к этому добавляете?

Boopalslm

клиент-это имя столбца представления таблицы данных, тип данных float, а ниже приведен мой полный код

foreach (DataGridViewRow rows in dataGridView1. Rows)
{



SqlConnection con1 = new SqlConnection(db. Connectionstring());
вы видите con1.Открыть();
SqlCommand cmd1 = new SqlCommand ("select * from stkdetails where empname='" + rows.Ячейки[2]. Значение + "'", con1);

SqlDataReader dr = cmd1.Метода executereader();


если (dr. HasRows)
{


SqlConnection con2 = new SqlConnection(db. Connectionstring());
con2.Открыть();


Sqlcommand, который cmd2 = новая команда sqlcommand("обновление stkdetails установить клиент=клиент+@поддержки, где столбец empname=@столбец empname и дата=@дата", con2);
cmd2.Параметры.AddWithValue ("@customer", строки.Ячейки[7]. Значение);
cmd2.Параметры.AddWithValue ("@empname", строки.Ячейки[2]. Значение);
cmd2.Параметры.AddWithValue ("@date", txtdate.Текст);

cmd2.Метод executenonquery();
con2.Рядом();


}

ещё
{
SqlConnection con3 = new SqlConnection(db. Connectionstring());
кон3.Открыть();
Sqlcommand, который cmd3 = новая команда sqlcommand("вставить в stkdetails(дата,столбец empname,заказчик)значения('" + txtdate.Текст +"', '" + строки.Ячейки[2]. значение +"', '" + строки.Ячейки[7]. значение + "')", con3);
cmd3.Метод executenonquery();
кон3.Закрывать();

}


}

Midi_Mick

ОК - возможно, вам придется убедиться, что ваш параметр имеет правильный тип:
Попробуйте изменить строку, в которую вы добавляете параметр @customer
cmd2.Параметры.AddWithValue ("@customer", Convert.ToDouble (строки.Ячейки[7]. Значение));

Также стоит настроить запрос в cmd3 как параметризованный, точно так же, как мы только что сделали для cmd2.

Boopalslm

Я изменяю свой код в соответствии с вашим способом, но ниже ошибка пришла

Параметризованного запроса '(@поплавка поддержки,@столбец empname тип nvarchar(4000),@дата тип nvarchar(10))инсэ' ожидает, что параметр '@столбец empname', который не был указан.

Boopalslm

я меняю cmd3 меняю на тот же путь на cmd2 но ниже ошибка пришла

это мой другой части кода

ещё
{
SqlConnection con3 = new SqlConnection(db. Connectionstring());
кон3.Открыть();



Sqlcommand, который cmd3 = новая команда sqlcommand("вставить в stkdetails(заказчик,столбец empname,дата)значения(@клиент@столбец empname,@дата)", управления con3);
cmd3.Параметры.AddWithValue ("@customer", Convert.Метод todouble
(грядки.Ячейки[7]. Значение));

cmd3.Параметры.AddWithValue ("@empname", строки.Ячейки[2]. Значение);
cmd3.Параметры.AddWithValue ("@date", txtdate.Текст);
cmd3.Метод executenonquery();
кон3.Закрывать();

}


но ошибка в том, чтобы дать мне некоторые идеи.

Параметризованного запроса '(@поплавка поддержки,@столбец empname тип nvarchar(4000),@дата тип nvarchar(10))инсэ' ожидает, что параметр '@столбец empname', который не был указан.

Midi_Mick

Хорошо-хорошо, ввод параметра @customer, казалось, сработал, когда он перешел к следующему параметру для отчета. Я заметил, что DataGridViewCell. Value возвращает тип object, поэтому нам может потребоваться привести каждый параметр к его правильному типу. Возможно, лучше перейти к методу Add, а не к AddWithValue. Добавление параметра будет выглядеть примерно так

МВ2.Параметры.Добавить("@поддержки", значения sqldbtype.Плыть).Значение = строки.Ячейки[7]. Значение;

Взгляните сюда https://msdn.microsoft.com/en-us/library/system.data.sqldbtype (v=vs.110). aspx для различных параметров SqlDbType. Существует также необязательный параметр int для размера, если вы используете строки фиксированной длины в своей базе данных.

Boopalslm

я изменю cmd2 в соответствии с вашим кодом

cmd2.Параметры.Добавить("@поддержки", значения sqldbtype.Плыть).Значение = строки.Ячейки[7]. Значение;

но ниже ошибка пришла


Параметризованный запрос' (@customer float,@empname nvarchar(4000),@date nvarchar (10))upda 'ожидает параметр' @customer', который не был указан.

Сэр пожалуйста дайте мне идеи или измените мои общие коды и пришлите мне сэр

Boopalslm

данные прекрасно хранятся в базе данных. пришла только ошибка

Параметризованный запрос' (@customer float,@empname nvarchar(4000),@date nvarchar (10))upda 'ожидает параметр' @customer', который не был указан.

Midi_Mick

Данные попадают в базу данных? Тогда какая строка выдает ошибку?

Мне придется вернуться к этому завтра, извини. Здесь уже почти два часа ночи.

Boopalslm

Сэр, я получил ответ, Спасибо за Вашу поддержку.............