Ошибка вставки базы данных: «строка или двоичные данные будут обрезаны»

Когда я вхожу в систему, я сохраняю свое имя пользователя в сеансе. Мое требование заключается в том, что я хочу сохранить свое имя пользователя в моей базе данных. Здесь я храню это вusername1, Когда имя пользователя введено, я могу распечатать его, используяresponse.write() и это печатает отлично. Однако, когда я сохраняю его в базе данных, он выдает эту ошибку:

**sqlException was unhandled by user code
and exception at       cmd.ExecuteScalar();
String or binary data would be truncated.
The statement has been terminated.**

Ниже приведен мой код ado.net:

using (SqlConnection con = 
    new SqlConnection("Data Source=.;database=testdb1;Integrated Security=SSPI")) {

    con.Open();
    //  SqlCommand cmd = new SqlCommand("delete from fileinfo where ID=" + Convert.ToInt32(Request.Params["one"]), con);                            

    string uname = (string) Session["fname"].ToString() + " " + Session["lname"].ToString(); //Session["fname"].ToString()+" "+Session["lname"].ToString();

    // Response.Write(uname);
    // uname = "sri hari";
    uname = uname + " ";
    string uname1 = uname;
    uname = uname.Trim();
    SqlCommand cmd = new SqlCommand("insert into qry_details values('" + txt_query_name.Text + "','pending for approval','" + txt_query_description.Text + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + qry + "','" + uname1 + "')", con);
    cmd.ExecuteScalar();
}
 Paiman Samadian02 мар. 2017 г., 07:56
Я единственный человек, пытающийся проанализировать риск инъекций?
 Simon MᶜKenzie26 июн. 2013 г., 08:23
Какой тип данных столбца, в который вы пытаетесь вставить имя пользователя? Значение хранится вuname длиннее, чем длина этого столбца.
 Satinder singh26 июн. 2013 г., 08:24
@srihari: вам нужно проверить схемы таблиц, типы данных и сделать запросINSERT INTO table_name (column1,column2,column3,...) VALUES (@value1,@value2,@value3,...); вы можете столкнуться с несоответствием столбцов

Ответы на вопрос(3)

Решение Вопроса

меньше ли она строки, которую вы отправляете в базу данных?

в основном исключение говорит, что вы пытаетесь сделать что-то большее, чем длина столбца.

 Simon MᶜKenzie26 июн. 2013 г., 08:25
@srihari, тогда какова ценность?uname.Length
 srihari26 июн. 2013 г., 08:23
но если присваивать строковое значение напрямую, оно вставляется как uname = "Срихари» если я вставляю сессию, это дает исключение
 srihari26 июн. 2013 г., 08:23
я дал одно имя 50 длина

теперь уязвим для внедрения SQL. Также вы должны использоватьExecuteNonQuery метод по команде SQL вместоExecuteScalar при вставке значений в базу данных:

var connectionString = "Data Source=.;database=testdb1;Integrated Security=SSPI";
using (SqlConnection con = new SqlConnection(connectionString))
using (SqlCommand cmd = con.CreateCommand())
{
    con.Open();
    cmd.CommandText = "INSERT INTO qry_details VALUES (@query_name, 'pending for approval', @query_description, @date, @qry, @username)";
    cmd.Parameters.AddWithValue("@query_name", txt_query_name.Text);
    cmd.Parameters.AddWithValue("@query_description", txt_query_description.Text);
    cmd.Parameters.AddWithValue("@date", DateTime.Now);
    cmd.Parameters.AddWithValue("@qry", qry);
    cmd.Parameters.AddWithValue("@username", uname1);
    cmd.ExecuteNonQuery();
}
 srihari26 июн. 2013 г., 08:24
это дает в cmd.ExecuteNonQuery ();
 srihari26 июн. 2013 г., 08:16
строка uname 1 = (строка) Session ["имя_файла»] .ToString () + " " + Сессия ["LNAME»].Нанизывать();
 Simon MᶜKenzie26 июн. 2013 г., 08:17
Но как насчет "Строка или двоичные данные будут проигнорированы" ошибка?
 srihari26 июн. 2013 г., 08:17
затем также происходит то же исключение. исключение - строка или двоичные данные будут обрезаны. Заявление было прекращено.
 Satinder singh26 июн. 2013 г., 08:12
+1 за использование параметризма

когда значение вставки превышает ширину поля, определенную в таблице на SQL Server.

Проверьте, вставляете ли вы дату и время, используя DateTime.Now c # fuction, ваша таблица должна иметь тип DateTime. не только дата или время.

Ваш ответ на вопрос