2017-05-24 96 views
-1

错误:SQL Server的更新查询错误

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Additional information: Incorrect syntax near '4'.

Unclosed quotation mark after the character string ''.

我的代码:

public partial class editemp : Window 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=Haier;Initial Catalog=HRMS;Integrated Security=True"); 
    SqlCommand cmd; 
    SqlDataReader dr; 
    int empid; 

    public editemp() 
    { 
     InitializeComponent(); 
    } 

    private void editemp_fun(object sender, RoutedEventArgs e) 
    { 
     con.Open(); 
     searchid(textBox.Text); 
     dr.Close(); 
     con.Close(); 
     con.Open(); 

     cmd = new SqlCommand("update Employee set EmpID='"+empid+ "',E_Name='" + textBox.Text + "',E_Contact='" + textBox_Copy.Text + "',Designaiton='" + textBox_Copy1.Text + "',Password='" + passwordBox.Password.ToString() + "Where EmpID='"+empid.ToString() +"'", con); 

     cmd.ExecuteNonQuery(); 
     con.Close(); 
     new employees().Show(); 
     Close(); 
    } 

    public void searchid(string name) 
    { 
     //con.Open(); 
     cmd = new SqlCommand("Select * from Employee where E_Name='"+textBox.Text+"'",con); 

     dr = cmd.ExecuteReader(); 

     while (dr.Read()) 
     { 
      empid = Convert.ToInt32(dr[0].ToString()); 
     } 
    } 

    private void cancel(object sender, RoutedEventArgs e) 
    { 
     new employees().Show(); 
     Close(); 
    } 
} 

那必须是焦点主要查询

cmd = new SqlCommand("update Employee set EmpID='"+empid+ "',E_Name='" + textBox.Text + "',E_Contact='" + textBox_Copy.Text + "',Designaiton='" + textBox_Copy1.Text + "',Password='" + passwordBox.Password.ToString() + "Where EmpID='"+empid.ToString() +"'", con); 

在where子句中它给上面提到的错误。

非常感谢你

+6

第一件事:停止bu像这样的SQL。改用参数化的SQL。这可能是所有你需要做的事情,但它绝对应该是你做的第一件事。请参阅http://bobby-tables.com –

+0

在关键字之前给出“引用”和“空间”。 “'其中EmpID ='”+ empid.ToString() –

+2

接下来,了解.NET的命名约定,并遵循它们。 –

回答

-1

有一个空间之前,还有一个单引号。

所以

cmd = new SqlCommand("update Employee set EmpID='"+empid+ "',E_Name='" + textBox.Text + "',E_Contact='" + textBox_Copy.Text + "',Designaiton='" + textBox_Copy1.Text + "',Password='" + passwordBox.Password.ToString() + "' Where EmpID='"+empid.ToString() +"'", con); 

不过,我劝你做什么已被他人在评论建议。如果没有,你仍然可以得到错误,这取决于你用来构建sql命令文本的值。

+0

先生,你建议我有同样的观点,@Akshay Mahajan建议我,非常感谢我成功地运行了我的查询,再次感谢你 –

+0

这很相似。该评论仍然错过了WHERE之前的收盘单引号。这是缺少的报价是问题 - 这就是为什么错误是“未封闭引号”更新 - 我可以看到现在有一​​个报价。也许我第一次错过了它或者评论被编辑了。不要紧,重要的是你解决它,但请做所有其他评论建议改善你的代码。最好的问候 –

+0

先生,我已经提供该引号感谢你,现在我的查询是与你的相同,你在这里提到 –

-3

答案是

cmd = new SqlCommand("update Employee set EmpID='"+empid+ "',E_Name='" + textBox.Text + "',E_Contact='" + textBox_Copy.Text + "',Designaiton='" + textBox_Copy1.Text + "',Password='" + passwordBox.Password.ToString() + "' Where EmpID='"+empid.ToString() +"'", con); 

谢谢NemanjanPerovic爵士和阿克沙伊马哈詹

+2

这是***仍然开放***到SQL注入攻击 - 这是***不是***的答案!学习如何使用**参数化查询!** - 现在! –

+0

没有这是可怕的。您需要使用参数化查询。谷歌为Bobby桌上的 –

+0

。想想如果有人说他的名字是'Pwnd'会发生什么? DELETE FROM EMPLOYEE; - '这完全是*脚本小子为破解网络应用程序所做的 –

0

如果我理解正确的话,你想是这样的:

string query = "UPDATE Employee SET EmpID = @empid, E_Name = @ename, E_Contact = @econtact, Designaiton = @designation, Password = @password WHERE EmpID = @empid"; 

SqlCommand cmd = new SqlCommand(query, conn); 

cmd.Parameters.AddWithValue("@empid", empid); 
cmd.Parameters.AddWithValue("@ename", textBox.Text); 
cmd.Parameters.AddWithValue("@econtact", textBox_Copy.Text); 
cmd.Parameters.AddWithValue("@designation", textBox_Copy1.Text); 
cmd.Parameters.AddWithValue("@password", passwordBox.Password.ToString()); 

注意如何我已经使用参数,而不是字符串连接,这是非常重要的。