当我登录时,我将我的用户名存储在会话中。我的要求是我想将我的用户名存储在我的数据库中。我将它存储在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();
}
答案 0 :(得分:20)
检查qry_details表的长度,看看它是否小于你发送给db的字符串?
基本上例外情况表明你正在尝试大于列长度的东西。
答案 1 :(得分:9)
我建议您使用参数化查询。您的代码现在容易受到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();
}
答案 2 :(得分:1)
当插入值大于SQL Server上的表中定义的字段宽度时,通常会发生此错误。
检查您是否使用DateTime.Now c#fuction插入日期和时间,您的表必须是DateTime类型。不仅仅是日期或时间。