C# 使用执行标量方法检索外键ID

C# 使用执行标量方法检索外键ID,c#,sql,asp.net,database,C#,Sql,Asp.net,Database,我有两个数据库表,一个是 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时,我似乎无法使用该OrderID来使用该ID填充我的OrderDetails 这是我的密码 SqlConnection conn = new

我有两个数据库表,一个是

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时,我似乎无法使用该OrderID来使用该ID填充我的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);

                }
            }
        }
SqlConnection conn=newsqlconnection(“数据源=localhost;初始目录=ProjectDB;集成安全=SSPI”);
conn.Open();
String addOrder=“插入订单值(@U_NAME、@OR_TOTALPRICE、@OR_STATUS、@PROMO_ID)选择强制转换(scope_identity()为int)”;
String addDetails=“在订单中插入详细信息值(@或\u ID、@PRODUCT\u ID、@或\u deu QTY、@或\u deu TotalPrice)”;
SqlCommand cmdATO=新的SqlCommand();
使用(康涅狄格州)
{
cmdATO.CommandText=addOrder;
连接=连接;
cmdATO.Parameters.AddWithValue(“@U_NAME”,NAME);
cmdATO.Parameters.AddWithValue(“@或_TOTALPRICE”,finalTotal);
cmdATO.Parameters.AddWithValue(“或_状态”,false);
cmdATO.Parameters.AddWithValue(“促销ID”,0);
尝试
{
conn.Open();
orderID=(int)cmdATO.ExecuteScalar();//获取订单ID
lblError.Text=”“+订单ID;
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
如果(订单ID!=0)
{
使用(康涅狄格州)
{
cmdATO.CommandText=addDetails;
连接=连接;
conn.Open();
尝试
{

对于(int i=0;i您的连接是由第一个
using
处理的。当您再次尝试使用它时,我希望您会收到一条关于此问题的错误消息。创建两个单独的连接,或者整个方法中应该只有一个
using
语句。如果您想将insert命令用于多个values您需要在for循环中创建并执行它。最好创建一个新命令,而不是重复使用旧命令。您在orderID变量中得到了什么?您的datatable中有什么?@Atk是的,我从datatable中检索到了它,但在使用它时,我似乎无法填充我的Order\u Details table提供一个什么的屏幕截图在每个变量中都有,以便我们可以帮助您。