为什么我的SQL'INSERT'语句执行两次?

时间:2013-11-25 17:17:34

标签: c# asp.net sql sql-server

我有以下插入命令,我需要获取范围标识,以便稍后在应用程序中进行一些订单跟踪

SqlCommand cmd1 = new SqlCommand("INSERT INTO [pharm_OrderID](UserID, RequestType, CreateDate) values (@UserID, @RequestType, @CreateDate); Select SCOPE_IDENTITY();", conn1);
                    cmd1.CommandType = CommandType.Text;
                    conn1.Open();

                    string strUserID = txtEmpID.Text;
                    cmd1.Parameters.Add("@UserID", SqlDbType.NVarChar, 50);
                    cmd1.Parameters["@UserID"].Value = strUserID;

                    string strRequestType = ddlReturnType.SelectedValue;
                    cmd1.Parameters.Add("@RequestType", SqlDbType.NVarChar, 50);
                    cmd1.Parameters["@RequestType"].Value = strRequestType;

                    string strCreateDate = lblOrderAttemptTime.Text;
                    cmd1.Parameters.Add("@CreateDate", SqlDbType.NVarChar, 50);
                    cmd1.Parameters["@CreateDate"].Value = strCreateDate;

                    cmd1.ExecuteNonQuery();

                    string numScope = Convert.ToString(cmd1.ExecuteScalar());
                    lblOrderNum.Text = numScope;
                    cmd1.Dispose();
                    conn1.Close();
                    conn1.Dispose();

但为什么要插两次?

6 个答案:

答案 0 :(得分:14)

您正在执行两次

  1. cmd1.ExecuteNonQuery();
  2. Convert.ToString(cmd1.ExecuteScalar());
  3. 您只需要ExecuteScalar来插入并选择:

    decimal newID = (decimal) cmd1.ExecuteScalar();
    

答案 1 :(得分:2)

因为你已经执行了两次;一次作为ExecuteNonQuery(),一次作为ExecuteScalar()。

答案 2 :(得分:2)

因为你执行了两次:

   cmd1.ExecuteNonQuery(); //once

   string numScope = Convert.ToString(cmd1.ExecuteScalar()); //twice

摆脱cmd1.ExecuteNonQuery();并使用ExecuteScalar()

答案 3 :(得分:2)

您的查询执行两次的原因是因为您同时调用了ExecuteNonQuery
和命令对象上的ExecuteScalar。

答案 4 :(得分:2)

那是因为你要执行两次。

首先来到这里:

cmd1.ExecuteNonQuery();

然后在这里:

string numScope = Convert.ToString(cmd1.ExecuteScalar());

删除第一个。

答案 5 :(得分:0)

您正在执行两次。

cmd1.ExecuteNonQuery(); // 1st

string numScope = Convert.ToString(cmd1.ExecuteScalar()); // 2nd

删除其中一个。