我想在DB中附加一个包含列值的现有值的大字符串值。此列设置为nvarchar(MAX)
。但是当我尝试时,只有新字符串的前几部分附加旧值。其他人没有附加。请建议。
string initial_result ="xxxxxx";//reading values from db column and assigning to string
string final_result="yyyyyyyyyy";//lengthier one
SqlCommand cmd71 = new SqlCommand("update details set result='" + initial_result + "'+'"+finalresult+"' where student_id ='11' ", con7);
cmd71.ExecuteNonQuery();
答案 0 :(得分:2)
因为在连接initial_result
和finalresult
值时使用了不必要的单引号。
result='" + initial_result + "'+'"+finalresult+"'
^ ^
但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
还可以使用using
statement来处置数据库连接和对象。
using (SqlConnection con7 = new SqlConnection(cs))
{
using (SqlCommand cmd71 = con7.CreateCommand())
{
cmd71.CommandText = "update details set result = @result where student_id ='11'";
cmd71.Parameters.Add("@result", SqlDbType.NVarChar).Value = initial_result + finalresult;
cmd71.ExecuteNonQuery();
}
}
答案 1 :(得分:0)
试试这个:
"update details set result=result+'" + finalresult + "' where student_id ='11'"
这会附加,你也不需要读取initial_result
答案 2 :(得分:0)
正如“SonerGönül”提到的那样,为避免Sql Injection攻击,请将代码格式化为:
//reading values from db column and assigning to string
string initial_result ="xxxxxx";
//lengthier one
string final_result="yyyyyyyyyy";
string connectionstring = "your connection string here";
string query = "update details set result=@result where student_id = 11";
using(SqlConnection con = new SqlConnection(connectionstring))
{
SqlCommand cmd = new SqlCommand(query,con);
con.Open();
cmd.Parameters.Add(new SqlParameter("@result", initial_result + finalresult));
int executeresult = cmd.ExecuteNonQuery();
if(executeresult > 0)
{
Response.Write("Update Success");
}
else
{
Response.Write("Unable to Update");
}
cmd.Dispose();
}