簡體   English   中英

數據庫插入錯誤:“字符串或二進制數據將被截斷”

[英]Database insert error: “string or binary data would be truncated”

當我登錄時,我將我的用戶名存儲在會話中。 我的要求是我想將我的用戶名存儲在我的數據庫中。 這里我將它存儲在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();
}

檢查qry_details表的長度,看看它是否小於你發送給db的字符串?

基本上例外,你說你正在嘗試比列長更大的東西。

我建議你使用參數化查詢。 您的代碼現在容易受到SQL注入攻擊。 在將值插入數據庫時​​,您還應該在SQL命令上使用ExecuteNonQuery方法而不是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();
}

當插入值大於SQL Server上的表中定義的字段寬度時,通常會發生此錯誤。

檢查是否使用DateTime.Now c#fuction插入日期和時間,您的表必須是DateTime類型。 不僅僅是日期或時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM