将值附加到数据库中的列值

时间:2014-10-17 07:43:39

标签: c# sql asp.net sql-server

我想在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();

3 个答案:

答案 0 :(得分:2)

因为在连接initial_resultfinalresult值时使用了不必要的单引号。

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();
}