2017-02-24 53 views
1

我創建了一個具有一個表,tblCustomerInformation,三列一個簡單的SQL數據庫:C#SQL更新CommandText和Parameters

  • 名字,
  • 姓氏,
  • 和電子郵件。

我試圖然而,更新它,當我跑,我列出下面的程序不執行任何代碼。

它不會崩潰,給我錯誤,它什麼都不做。

我很確定我的UPDATE聲明是正確的。我不確定爲什麼在這一點上這不起作用。

using (SqlConnection Connection = new SqlConnection(@"Data Source=EWOODWARD-PC\SQL2012; Initial Catalog=CustomerGUI; Integrated Security=True")) 
{ 
    using (SqlCommand cmd = Connection.CreateCommand()) 
    { 

     cmd.CommandText = "UPDATE tblCustomerInformation SET LastName = @ln, Email = @em WHERE (FirstName = @fn)"; 

     //cmd.Parameters.Add("@ln", SqlDbType.NVarChar); 
     //cmd.Parameters["@ln"].Value = txtLastName.Text; 

     //cmd.Parameters.Add("@em", SqlDbType.NVarChar); 
     //cmd.Parameters["@em"].Value = txtEmail.Text; 

     //cmd.Parameters.Add("@fn", SqlDbType.NVarChar); 
     //cmd.Parameters["@fn"].Value = txtFirstName.Text; 


     cmd.Parameters.AddWithValue("@ln", txtLastName.Text); 
     cmd.Parameters.AddWithValue("@fn", txtFirstName.Text); 
     cmd.Parameters.AddWithValue("@em", txtEmail.Text); 

     Connection.Open(); 

     cmd.ExecuteNonQuery(); 
    } 
} 
+1

如果您手動運行它,FirstName = @fn會得到滿足嗎?作爲最後的手段捕獲SQL調用的跟蹤。 –

+0

運行此操作時,調用堆棧中的任何位置是否有異常處理程序?你確定沒有錯誤,只是被吞噬? – Crowcoder

+0

您將什麼值放入文本框中,數據庫中現有的行看起來像是您想要更新的內容? – pilotcam

回答

0

使用此。不應該混淆cmd.Parameters...代碼的安排。根據查詢中的安排進行安排。

using (SqlConnection Connection = new SqlConnection(@"Data Source=EWOODWARD-PC\SQL2012; Initial Catalog=CustomerGUI; Integrated Security=True")) 
{ 
    using (SqlCommand cmd = Connection.CreateCommand()) 
    { 

     cmd.CommandText = "UPDATE tblCustomerInformation SET LastName = @ln, Email = @em WHERE FirstName = @fn"; 

     cmd.Parameters.AddWithValue("@ln", txtLastName.Text); 
     cmd.Parameters.AddWithValue("@em", txtEmail.Text); 
     cmd.Parameters.AddWithValue("@fn", txtFirstName.Text); 

     Connection.Open(); 

     cmd.ExecuteNonQuery(); 
    } 
} 

曾經遇到過這種錯誤。

+1

我第一次聽到這樣的話。你確定你有清理後的問題? – apomene

+0

我從來沒有聽說過這個,這對我沒有意義。 dotnet中參數的一個重要優點是我們最終有能力按名稱解決它們。許多其他語言依賴於參數的順序。 –