2013-10-24 165 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并关闭您的连接。