c# 更新语句与 where 子句

标签 c# sql

我有一个包含订单号和跟踪号的数据库。 ordernumber 已经完成。

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

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

        }






    }
}

最佳答案

ExecuteNonQuery 方法返回受影响的行数。您的查询运行良好,但没有更新任何行。因此也不异常(exception)。

我捕获更新的行数,然后检查:

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 = "";

关于c# 更新语句与 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19563915/

相关文章:

c# - 在线程返回池之前如何阻塞?

c# - SQLCacheDependency 和 AppFabric 服务器

php文件路径/文件扩展名未保存到sql中的数据库

php - MySQL 替换 sum(if(xxx,1,0))

php - 生成从 mysql ID 获取下一个唯一编号

c# - 角度边界问题

c# - 如何构建 Web API Controller 并返回结果

c# - C# 中的事件处理程序应该引发异常吗?

mysql - 如何在基于另一列的同一行中减去mysql

sql - 表单中的必填字段现在必须设为可选,新字段成为必填字段,同时与原始字段具有可选关系