1

ASP.NET と SQL Server を使用して、Web ベースの物流システムを設計しています。

私のクラスの 1 つで、データベースにデータを挿入しようとすると、主キー違反エラーが発生しますが、データはテーブルに正常に挿入されます。問題がどこにあるのかわかりません。誰かが私が間違っていることを見ることができますか?

public int fillShipmentDetail()
{
   int success = 0;
   string connectionString = ConfigurationManager.ConnectionStrings["LGDB"].ToString();

   SqlConnection sqlCon = new SqlConnection(connectionString);

   SqlCommand sqlCom = new SqlCommand("fillShipmentDetails", sqlCon);
   sqlCom.CommandType = CommandType.StoredProcedure;

   sqlCon.Open();

   sqlCom.Parameters.AddWithValue("shipOrderID", ShipOrderID);
   sqlCom.Parameters.AddWithValue("totalWeight", TotalWeight);
   sqlCom.Parameters.AddWithValue("weightIsMetric", WeightUnit);
   sqlCom.Parameters.AddWithValue("weightIsImperial", VolumeUnit);
   sqlCom.Parameters.AddWithValue("volume", Volume);
   sqlCom.Parameters.AddWithValue("quantity", Quantity);
   sqlCom.Parameters.AddWithValue("value", Value);
   sqlCom.Parameters.AddWithValue("description", GoodsDescription);            

   success = sqlCom.ExecuteNonQuery();

   if (success == 1)
   {
      success = 1;
   }
   else
   {
      success = 0;
   }            

   sqlCon.Close();            
   return success;
}

aspx.csページ

 Classes.ShipmentDetails fillShipmentDetails = new Classes.ShipmentDetails(
                getLastShipOrder, _weight, _checkMetricImperial_weight, _checkMetricImperial_volume,
                _volume, _quantity, _value, txtGoodsDescription.Text);
            int success3 = fillShipmentDetails.fillShipmentDetail();

ここに画像の説明を入力

下の図でわかるように、レコード shipOrderID 7192 は既にテーブルに挿入されています。

ここに画像の説明を入力

3 つのテーブルをすべて削除し、新しいデータを挿入しました。データは正常に挿入されますが、エラーが再び発生します。ここに画像の説明を入力

このスクリーンショットはすべてを明確に示しています。データベースへの新しい挿入ごとに、最後のテーブルに主キーエラーがあります。重複キーとデータが正常に挿入されていないことがわかります。 ここに画像の説明を入力

4

2 に答える 2

2

fillShipmentDetails.fillShipmentDetail() が 2 回起動されているようです。コードにブレークポイントを配置して確認する

于 2013-09-09T15:08:25.387 に答える
1

shipOrderId既にテーブルに存在します。

新しい一意の値を与える必要があります。テーブルが更新される理由は、がshipOrderId既に存在するためです。そのため、ID を使用して新しいテーブルを作成できますが、Shipping Orderその順序は正しいものを参照していません。shipOrderId

于 2013-09-09T14:59:55.227 に答える