Использование «Выполнить скалярный метод» для получения идентификатора внешнего ключа - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть две таблицы базы данных, одна -

ORDERS: OR_ID (PK), U_NAME, OR_TotalPrice, OR_STATUS, PROMO_ID

, а другая -

Order Details: OR_ID(FK to ORDERS) Product_ID, OR_QTY, Product_TotalPrice

Когда я выполняю скалярный метод для получения OrderID из Order, я не могу показаться использовать этот OrderId для заполнения моих OrderDetails с использованием этого идентификатора.

Вот мой код;

SqlConnection conn = new SqlConnection("Data Source=localhost; Initial Catalog=ProjectDB; Integrated Security=SSPI");
        conn.Open();
        String addOrder = "INSERT INTO ORDERS VALUES(@U_NAME,@OR_TOTALPRICE,@OR_STATUS,@PROMO_ID) SELECT CAST(scope_identity() as int)";
        String addDetails = "INSERT INTO Order_Details VALUES(@OR_ID,@PRODUCT_ID, @OR_DE_QTY, @OR_DE_TotalPrice)";

        SqlCommand cmdATO = new SqlCommand();
        using (conn)
        {
            cmdATO.CommandText = addOrder;
            cmdATO.Connection = conn;
            cmdATO.Parameters.AddWithValue("@U_NAME", name);
            cmdATO.Parameters.AddWithValue("@OR_TOTALPRICE", finalTotal);
            cmdATO.Parameters.AddWithValue("OR_STATUS", false);
            cmdATO.Parameters.AddWithValue("PROMO_ID", 0);

            try
            {
                conn.Open();
                orderID = (int)cmdATO.ExecuteScalar();  //Gets Order_ID
                lblError.Text = ""+orderID;


            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        if (orderID != 0)
        {
            using(conn)
            {
                cmdATO.CommandText = addDetails;
                cmdATO.Connection = conn;
                conn.Open();
                try
                {
                    for (int i = 0; i <= dt.Rows.Count - 1; i++)
                    {

                        cmdATO.Parameters.AddWithValue("@OR_ID", orderID);
                        cmdATO.Parameters.AddWithValue("@PRODUCT_ID", dt.Rows[i]["product_ID"]);
                        cmdATO.Parameters.AddWithValue("@OR_DE_TOTALPRICE", dt.Rows[i]["totalprice"]);
                        cmdATO.Parameters.AddWithValue("@OR_DE_QTY", dt.Rows[i]["quantity"]);

                        cmdATO.ExecuteNonQuery();

                    }
                }
                catch(Exception ez)
                {
                    Console.WriteLine(ez.Message);

                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...