2013-07-02 132 views
-2

我無法讓我的代碼在使用.Net和C#的SQL Server數據庫中更新表中的一行我對.NET,C#或SQL服務器並不完全陌生,但不也有豐富的經驗。Sql服務器更新不起作用

using (SqlConnection CSConnString = new SqlConnection(ConfigurationManager.ConnectionStrings["cs_BillingConnectionString1"].ConnectionString)) 
{ 
    CSConnString.Open(); 

    SqlCommand comm = new SqlCommand(); 

    comm = CSConnString.CreateCommand(); 

    comm.CommandText = "UPDATE cs_PriceListHeader SET PriceListName = @name where PriceListID =" + PlanID; 

    comm.Parameters.Add("@name", SqlDbType.NVarChar); 
    comm.Parameters["@name"].Value = txtbListName.Text; 

    comm.ExecuteNonQuery(); 

    CSConnString.Close(); 
} 

的代碼不給任何錯誤,它只是不插入數據

+0

嘗試運行SQL查詢,也做SQL中的選擇與where語句在返回行中查看。 –

+2

你應該參數化'WHERE'和'SET'。 'PriceListID =「+ PlanID'看起來不正確,除非你的命名不一致。 –

+3

現在這是新事物 - 一個* semi *參數化查詢:-D –

回答

5

如您使用的是UPDATE聲明你將永遠不會插入新記錄。您也可以使用參數化查詢來查找一個變量(名稱),但是您的原始數據是PriceListId,容易受到SQL Injection的影響。

檢查PlanId的值並確保它正在更新。

如果您打算INSERT數據到數據庫中,而不是UPDATE你需要使用INSERT聲明:

INSERT INTO cs_PriceListHeader 
(PriceListId, PriceListName) 
VALUES 
(@PlanId, @name) 

編輯:

從意見,刪除:

comm.Parameters.Add("@name", SqlDbType.NVarChar); 
comm.Parameters["@name"].Value = txtbListName.Text; 

並將其替換爲:

comm.Parameters.AddWithValue("@name", txtbListName.Text); 
+0

否我不想更新而不插入!在此之前,PlanID正從數據庫中拔出,而不是爲什麼不更新? – user2437588

+0

@ user2437588 - PlanID的值是多少? –

+0

這個ID沒什麼問題,如果我把@name替換成'要插入的文本'這樣的東西,它會完全更新該文本行我想要 – user2437588

0

在你的情況下,它似乎缺少參數,它不是很好的做法來更新數據庫中的值,就像你所做的一樣。

保持連接字符串和數據庫訪問邏輯分離

下面是一些基本的東西,你可以記住,我相信這會有所幫助

  • 每當你做出隱藏文件代碼的變化(。 CS)確保你已經編譯了這個項目。
  • 嘗試調試應用程序,添加一些斷點,它會給你的流量控制好

希望這將有助於