2013-10-24 224 views
1

我有一個數據庫訂單號& trackingnumber。訂單號碼已完成。c#更新語句與where子句

我有以下代碼來更新我的數據庫中的trackingnumber列,但它只能更新訂單號碼與用戶輸入的內容相匹配的位置(用戶在default.aspx中輸入訂單號和跟蹤號碼)

目前代碼似乎工作正常。但我已經注意到一個問題,我不知道如何解決: ordernumber列只能達到數字3578,所以我認爲,如果用戶鍵入3579或更高,或實際上任何不匹配的訂單號碼,然後將拋出一個異常,但它會說「已更新」。然而沒有3579的訂單號,它不存在。所以是我的SQL查詢不能正常工作?因爲我有「Where」條款。或者還有其他我錯過的東西?

代碼:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Data; 
    using System.Data.SqlClient; 
    using System.Configuration; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 

    namespace tracking 
    { 
     public partial class _Default : Page 
     { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     errorLabel.Visible = false; 
     SuccessLabel.Visible = false; 
    } 

    protected void submitBtn_Click(object sender, EventArgs e) 
    { 
     int _orderID = Convert.ToInt32(orderID.Text); 
     string _trackingID = trackingNumber.Text; 

     SqlConnection myConnection = new SqlConnection("Data Source=MYDATABASESERVER;Initial Catalog=DATABASENAME;User ID=USERNAME;Password=PASSWORD"); 
     SqlCommand myCommand = new SqlCommand("UPDATE Shipment SET TrackingNumber = @tracking WHERE OrderId = @order", myConnection); 

     try 
     { 
      myConnection.Open(); 
      myCommand.Parameters.AddWithValue("@order", _orderID); 
      myCommand.Parameters.AddWithValue("@tracking", _trackingID); 
      myCommand.ExecuteNonQuery(); 
      myConnection.Close(); 
      SuccessLabel.Text = "Thank you, tracking details have been updated"; 
      SuccessLabel.Visible = true; 
      orderID.Text = ""; 
      trackingNumber.Text = ""; 
     } 
     catch (Exception f) 
     { 
      errorLabel.Text = f.Message.ToString(); 
      errorLabel.Visible = true; 
      return; 

     } 






    } 
} 

}

+1

另外,如果發生異常,您的連接將保持打開!考慮將'myConenction.Close()'移動到'Finally'塊 – Dave

回答

4

ExecuteNonQuery方法返回受影響的行的數量。您的查詢運行正常,但沒有行更新。因此也不例外。

我趕上更新的行數,然後檢查:

myConnection.Open(); 
myCommand.Parameters.AddWithValue("@order", _orderID); 
myCommand.Parameters.AddWithValue("@tracking", _trackingID); 
int rowsUpdated = myCommand.ExecuteNonQuery(); 
myConnection.Close(); 
if(rowsUpdated > 0) 
{ 
    SuccessLabel.Text = "Thank you, tracking details have been updated"; 
    SuccessLabel.Visible = true; 
} 
orderID.Text = ""; 
trackingNumber.Text = ""; 
+0

太好了,非常感謝。 :) – drac

1

你的腳本不影響任何行。

ExecuteNonQuery方法返回受影響的行數。

if (myCommand.ExecuteNonQuery() == 0) 
{ 
    errorLabel.Text = "Tracking number is not found"; 
    errorLabel.Visible = true; 
} 

這會給你有很多的更新

0

,因爲該命令成功完成,但沒有行更新ExecuteNonQuery()返回更新的行數,首先要檢查它來確定搞什麼名堂了您的腳本來完成。

int res = myCommand.ExecuteNonQuery(); 
    if(res > 0) 
    { 
     Console.WriteLine("Worked"); 
    } 

不要忘了添加finally並關閉您的連接。