データベースに書き込まれた注文番号を知る必要があります。これを実現するために、SQL 式EXECUTESCALARを使用します。
プログラムをデバッグし、データベースを監視しました。2番目のコマンドを実行すると、レコードはデータベースに1回書き込まれ、同じレコードが2回目に書き込まれます。2 つのレコードが書き込まれず、注文番号が返されないように、何を変更する必要があるか教えていただけますか?
これは私のコードです:
public static int CreateDocumentNumber(string userId, string todaysDate, decimal docprice, decimal docpaid, int packageId, int orderstatus)
{
int orderId = 0; //return value order Id
//create order
string connectionString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
string insertSql = "INSERT INTO [dbo].[LD_Orders](TD_OrdUserID, TD_OrdDate, TD_OrdCost, TD_OrdPaid, TD_OrdPackage, TD_OrdStatus)" +
" VALUES (@UserId, @Date, @Cost, @Paid, @Package, @Status);SELECT SCOPE_IDENTITY()";
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand(insertSql, myConnection);
myCommand.Parameters.Add("@UserId", SqlDbType.VarChar).Value = userId;
myCommand.Parameters.Add("@Date", SqlDbType.Date).Value = todaysDate;
myCommand.Parameters.Add("@Cost", SqlDbType.Decimal).Value = docprice;
myCommand.Parameters.Add("@Paid", SqlDbType.Decimal).Value = docpaid;
myCommand.Parameters.Add("@Package", SqlDbType.Int).Value = packageId;
myCommand.Parameters.Add("@Status", SqlDbType.Int).Value = orderstatus;
myCommand.ExecuteNonQuery(); <---- FIRST RECORD WRITTEN
// time to collect the last order id
orderId = Convert.ToInt32(myCommand.ExecuteScalar()); <---- SECOND RECORD WRITTEN
myConnection.Close();
}
return orderId;
}