2017-05-24 125 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()); 

注意如何我已經使用參數,而不是字符串連接,這是非常重要的。