带有where子句的c#update语句

时间:2013-10-24 10:53:29

标签: c# sql

我有一个订单号和数据库的数据库追踪号码。订单号已经完成。

我有以下代码来更新我的数据库中的trackingnumber列,但它必须只更新ordernumber匹配用户键入的位置。(用户在default.aspx中输入订单号和跟踪号)

目前代码似乎工作正常。但我注意到一个问题,我不知道如何解决: ordernumber列只能达到3578,所以我希望如果用户键入3579或更高版本,或者确实是任何与ordernumber不匹配的东西,那么将抛出异常,但它会显示“已更新”。但是没有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;

        }






    }
}

}

3 个答案:

答案 0 :(得分: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 = "";

答案 1 :(得分:1)

您的脚本不会影响任何行。

ExecuteNonQuery方法返回受影响的行数。

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

这会让你有很多更新的

答案 2 :(得分:0)

因为命令已成功完成但没有行更新ExecuteNonQuery()会返回更新的行数,请先检查它以确定您的脚本已完成的操作。

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

别忘了添加finally并关闭您的连接。