1

注文番号と追跡番号のデータベースがあります。注文番号はすでに完了しています。

データベースの追跡番号列を更新する次のコードがありますが、ユーザーが入力した内容と一致する注文番号のみを更新する必要があります (ユーザーは、注文番号と追跡番号を 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;

        }






    }
}

}

4

3 に答える 3

1

スクリプトはどの行にも影響しません。

ExecuteNonQuery メソッドは、影響を受けた行数を返します。

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

これにより、多くのものが更新されます

于 2013-10-24T10:59:16.877 に答える
0

コマンドは正常に完了しましたが、rows updateExecuteNonQuery()は更新された行数を返さないため、最初にスクリプトで何が行われたかを確認してください。

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

finally接続を追加して閉じることを忘れないでください。

于 2013-10-24T10:59:40.230 に答える