moj1978 Ответов: 1

Преобразование значения nvarchar '3391569654' переполнило столбец int. Заявление было прекращено.


     protected void btnEdit_Click(object sender, EventArgs e)
        {
            try
            {   SqlConnection mysqlconection = new SqlConnection(myconect);
                SqlDataAdapter myadp = new SqlDataAdapter();
                myadp.UpdateCommand = new SqlCommand("Update [tbl_CustInfo] Set [mydate]=@mydate,[name]=@name,[idnasb]=@idnasb,[iddevice]=@iddevice,[email]=@email,[mobile]=@mobile,[tel]=@tel,[Adress]=@Adress WHERE [codemeli]=" + txtcodemeli.Text, mysqlconection);
                mydat = dryear.SelectedItem.Value.ToString() + "/" + drmonth.SelectedItem.Value.ToString() + "/" + drday.SelectedItem.Value.ToString();
                myadp.UpdateCommand.Parameters.Add("@mydate", SqlDbType.NVarChar, 15).Value = mydat;
                myadp.UpdateCommand.Parameters.Add("@name", SqlDbType.NVarChar, 100).Value = txtname.Text;
                myadp.UpdateCommand.Parameters.Add("@idnasb", SqlDbType.Int).Value = dridnasb.SelectedIndex;
                myadp.UpdateCommand.Parameters.Add("@iddevice", SqlDbType.Int).Value = drdevice.SelectedIndex;
                myadp.UpdateCommand.Parameters.Add("@email", SqlDbType.NVarChar, 50).Value = txtemail.Text.ToString();
                myadp.UpdateCommand.Parameters.Add("@mobile", SqlDbType.NVarChar, 11).Value = txtmobile.Text.ToString();
                myadp.UpdateCommand.Parameters.Add("@tel", SqlDbType.NVarChar, 11).Value = txttel.Text.ToString();
                myadp.UpdateCommand.Parameters.Add("@adress", SqlDbType.NVarChar, 250).Value = txtAdress.Text;
                myadp.UpdateCommand.Connection = mysqlconection;
                mysqlconection.Open();
                myadp.UpdateCommand.ExecuteNonQuery();
                mysqlconection.Close();                
            }
            catch (Exception ex)
            {
                errorLabel.Text = ex.Message;
                errorLabel.Visible = true;
            }
        }

What I have tried:

// when click edit Button i see above error message
// can you  tell me what is problem

moj1978

у меня есть идентификатор, который является первичным ключом
и одно поле "кодемели", что это не первичный ключ, но он уникален
я ищу в этой таблице с полем " codemeli"
это правда?

Philippe Mori

Что такое определение столбца codemeli в базе данных? И, как кто-то предложил, используйте параметризованный параметр запроса и для этого параметра.

1 Ответов

Рейтинг:
8

OriginalGriff

Ну ... это потому, что Ан int это 32-битное значение со знаком в диапазоне от -2,147,483,648 до 2,147,483,647. Значения за пределами этого диапазона не могут храниться в int.
Используйте целое число без знака или uint (От 0 до 4 294 967 295), или рассмотрите возможность перехода на long (-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807)

И сделайте себе одолжение: вы явно знаете о параметризованных запросах и SQL-инъекциях, так зачем же использовать еще и конкатенацию строк? Даже один экземпляр, который у вас есть в вашем коде, оставляет вас широко открытыми для повреждения или уничтожения вашей базы данных...


moj1978

вы можете видеть, что эти два элемента являются int и заполняются droppdownlist.Свойства selectedIndex
эта программа не нуждается в integer или uint
-----------------------------------------------------------
мядп.объекты UpdateCommand.Parameters. Add ("@idnasb", SqlDbType.Int).Значение = dridnasb.Свойства selectedIndex;
мядп.объекты UpdateCommand.Parameters. Add ("@iddevice", SqlDbType.Int).Значение = drdevice.Свойства selectedIndex;
----------------------------------------------------
Вы не могли бы мне помочь?

OriginalGriff

Ваше сообщение об ошибке очень явно: вы передаете SQL строковое значение, которое он пытается преобразовать в целочисленное значение. Эта строка содержит "339159654", что превышает значение, которое вы можете поместить в целое число, поэтому SQL жалуется.
Какая ценность? Не знаю - это зависит от вас и ваших данных.
Но ... если это SelectedIndex, я был бы поражен: вам понадобится выпадающий список или аналогичный элемент управления с более чем 3 000 000 000 элементов в нем - что было бы откровенно нелепо.
Используйте отладчик, посмотрите на свои данные. Мы не можем!