2014-02-07 111 views
1

我遇到了问题。我想更新表格,但我使用的代码无法工作 - 有人可以解释为什么?SQL更新不起作用

public void ChangeInfo(string Newname, string NewFullname, string NewEmail) 
{ 
    SqlConnection con = new SqlConnection("MyconnectionString"); 
    SqlCommand command = new SqlCommand("UPDATE [Users] SET [UserName]='" + Newname + "', [Fullname]='" + NewFullname + "', [Email]='" + NewEmail + "' WHERE [ID]='" + this.ID + "'", con); 
    con.Open(); 

    command.ExecuteNonQuery(); 
    con.Close(); 
} 

注意:所有列名都写得正确,ID也正确。

+2

请详细解释“不工作”。 –

+0

没有任何信息。 'ID'的价值是什么,记录是否真的存在于数据库中,你真的想设置一个新的用户名还是你可能设置相同的值?你是否在你发布的代码之外打开了一个事务?到正确的数据库?如果你使用SSMS执行相同的语句,你会得到任何结果吗? –

+2

伙计使用参数。这不仅丑陋,它是超级破坏 – Jonesopolis

回答

8

首先,你应该包装你的SqlCommandSqlConnectionusing妥善处置。然后永远不要在SQL中使用字符串连接,因为它使您打开SQL注入攻击。

public void ChangeInfo(string Newname, string NewFullname, string NewEmail) 
    { 
     using(SqlConnection con = new SqlConnection("MyconnectionString")) 
     using (
      SqlCommand command = 
       new SqlCommand(
        "UPDATE [Users] SET [UserName] = @UserName, [Fullname] = @NewFullName, [Email] = @NewWmail WHERE [ID] = @Id", 
        con)) 
     { 
      command.Parameters.AddWithValue("@UserName", Newname); 
      command.Parameters.AddWithValue("@NewFullName", NewFullname); 
      command.Parameters.AddWithValue("@NewMail", NewEmail); 
      command.Parameters.AddWithValue("Id", this.ID); 

      con.Open(); 

      command.ExecuteNonQuery(); 
      con.Close(); 
     } 
    } 

话虽这么说,你要么有一个坏的连接字符串(你还没有表现出我们的语法),或者你在查询应该由我的例子来清理了语法错误。

如果你想进一步解释你将需要定义It doesn't work并提供你所得到的错误。

+0

+1;很好的解释。但基于OP的更新,他没有得到任何例外,只是更新失败。也许他试图更新的记录确实不存在,或者他使用的ID是错误的。这就是我能想到的。 –

+0

谢谢你的工作,但我仍然不明白为什么发生这种事情? – user3260312

+0

没问题,请接受答案,如果它为你工作。至于*为什么*,我不确定...可能你的值中有一个'''在里面?使用参数化查询几乎总是可以摆脱语法错误,并使您的代码同时更安全。赢赢。 –

-1

即使我没有明确的想法。有意帮助。我猜MyconnectionString是你的连接字符串变量。如果它是连接字符串的变量,请删除引号,因为它是一个变量。如果这是错误,请回复。 :)