0

プロジェクト用のショッピングカートを開発していますが、orderidを取得して別のテーブルに挿入する方法に問題があります。

SQLServerに2つのテーブルがあります

Order
orderid (PK) | date| orderstatus| name| shippingaddress| contactnumber| totalprice| customerid|

Order_book
orderid (PK) | ISBN (PK)| quantity

注文テーブルからorderidを取得し、それをorder_bookに挿入したかったのですが、注文がデータベースに送信されるたびに、注文テーブルのorderidは1の増分を持つID整数です。

C#を使用して1つのテーブルから別のテーブルに同時に取得および挿入するための最良のオプションは何ですか?

ありがとう。

コード::

protected void checkout_Click(object sender, EventArgs e)
{
    SQLInjection sql = new SQLInjection();
    String name;
    String address; 
    int contactnumber;
    if (newaddresspanel.Visible == true)
    {
       name = sql.SafeSqlLiteral(NameLabel.Text, 2);
       address = Address1.Text + " " + Address2.Text + "," + PostalCode.Text + "," + State.SelectedItem.Value;
       contactnumber =  int.Parse(Telephone1.SelectedItem.Value) + int.Parse(Telephone2.Text);
       insertDetails(name, address, contactnumber);
    }
    else if (defaultaddresspanel.Visible)
    {
        SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["BookWormDBConnectionString"].ConnectionString);//connect to database
        SqlCommand bindDetails = new SqlCommand("SELECT NAME, ADDRESS, TELEPHONE_NUMBER FROM CUSTOMER WHERE CUSTOMERID = @username", myConnection);

        bindDetails.Parameters.Add("@username", SqlDbType.VarChar);
        bindDetails.Parameters["@username"].Value = username;

        try
        {
            myConnection.Open();
            SqlDataReader reader = bindDetails.ExecuteReader();
            while (reader.Read())
            {
                name = reader["NAME"].ToString();
                address = reader["ADDRESS"].ToString();
                contactnumber = int.Parse(reader["TELEPHONE_NUMBER"].ToString());
                insertDetails(name, address, contactnumber);

                }
            reader.Dispose();
            myConnection.Close();
        }
        catch (SqlException se)
        {


        }
    }
    try
    {
        cart = (DataTable)HttpContext.Current.Session["Cart"];
        foreach (DataRow dr in cart.Rows)
        {
            int isbn = int.Parse(dr["ISBN"].ToString());
            int quantity = int.Parse(dr["quantity"].ToString());
            insertOrderbook(isbn, quantity);
        }


    }

    catch (Exception ae)
    {

        Response.Write(ae.Message);

    }

オーダーブックの挿入:「失敗したもの」

protected void insertOrderbook(int isbn, int quantity)
{

    int orderid;
    SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["BookWormDBConnectionString"].ConnectionString);//connect to database
    SqlCommand orderId = new SqlCommand("SELECT SCOPE_IDENTITY() FROM ORDERBOOK", myConnection);


    try
    {
        myConnection.Open();

        orderid = int.Parse(orderId.ExecuteScalar().ToString());
            SqlCommand insertOrderBook = new SqlCommand("INSERT INTO ORDERBOOK_BOOK (ISBN, ORDERID, QUANTITY) VALUES (@isbn, @orderid, @quantity)", myConnection);

            insertOrderBook.Parameters.Add("@isbn", SqlDbType.Int);
            insertOrderBook.Parameters["@isbn"].Value = isbn;

            insertOrderBook.Parameters.Add("@orderid", SqlDbType.Int);
            insertOrderBook.Parameters["@orderid"].Value = orderid;

            insertOrderBook.Parameters.Add("@quantity", SqlDbType.Int);
            insertOrderBook.Parameters["@quantity"].Value = quantity;

            insertOrderBook.ExecuteNonQuery();
            myConnection.Close();
        }
    catch (SqlException se)
    {
        Response.Write(se.Message);
    }
}

注文の詳細を挿入::

protected void insertDetails(string name, string address, int contactnumber)
{
    SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["BookWormDBConnectionString"].ConnectionString);//connect to database
    SqlCommand orderDetails = new SqlCommand("INSERT INTO ORDERBOOK (DATE, ORDERSTATUS, TOTALPRICE, SHIPPING_ADD, CUSTOMERID, NAME, CONTACTNUMBER) VALUES (@date, @orderstatus, @totalprice, @shippingadd, @username, @name, @contactnumber)", myConnection);
    orderDetails.Parameters.Add("@date", SqlDbType.DateTime);
    orderDetails.Parameters["@date"].Value = getTime();

    orderDetails.Parameters.Add("@orderstatus", SqlDbType.VarChar);
    orderDetails.Parameters["@orderstatus"].Value = "Order Processing";

    orderDetails.Parameters.Add("@totalprice", SqlDbType.Decimal);
    orderDetails.Parameters["@totalprice"].Value = totalPrice;

    orderDetails.Parameters.Add("@shippingadd", SqlDbType.VarChar);
    orderDetails.Parameters["@shippingadd"].Value = address;

    orderDetails.Parameters.Add("@name", SqlDbType.VarChar);
    orderDetails.Parameters["@name"].Value = name;

    orderDetails.Parameters.Add("@contactnumber", SqlDbType.Int);
    orderDetails.Parameters["@contactnumber"].Value = contactnumber;

    orderDetails.Parameters.Add("@username", SqlDbType.VarChar);
    orderDetails.Parameters["@username"].Value = username;

    try {
        myConnection.Open();
        orderDetails.ExecuteNonQuery();
        myConnection.Close();

    }
    catch ( SqlException se)
    {


    }
}

エラー:入力文字列が正しい形式ではありませんでした

私はそれをデバッグしようとしました、どういうわけか、orderidは0を示しています

4

2 に答える 2

1

私が正しく理解している場合は、注文を挿入するときに新しく作成されたorderIdを取得し、そのIDをorder_bookに入れます。

最後に作成された値を取得するSELECT SCOPE_IDENTITY()には、注文テーブルにアイテムを挿入した直後に使用します。これにより、order_bookに挿入するorderIdが提供されます。

于 2012-05-13T16:57:37.903 に答える
0

あなたはこの選択をしています

SELECT SCOPE_IDENTITY() FROM ORDERBOOK

あなたがすべきことは、注文書の挿入SPに出力パラメーター(たとえば、@ orderBookId)を追加することです。その上で、挿入の直後に、次のことを行う必要があります。

SELECT @orderBookId = SCOPE_IDENTITY()

FROM句がないことに注意してください。出力パラメータとして、C#コードにパラメータを追加してください。

次に、詳細を挿入するときに、入力パラメーターとして@orderBookIdを追加するだけで、それだけです。

于 2012-05-13T18:24:58.687 に答える