简体   繁体   English

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

[英]Why does my SQL 'INSERT' statement execute twice?

I have the following Insert Command and I need to grab the Scope Identity for some order tracking later in the application 我有以下插入命令,我需要获取范围标识,以便稍后在应用程序中进行一些订单跟踪

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();

But why does it insert twice? 但为什么它插入两次?

You are executing it twice 你正在执行它两次

  1. cmd1.ExecuteNonQuery();
  2. Convert.ToString(cmd1.ExecuteScalar());

You just need ExecuteScalar to insert and select: 您只需要ExecuteScalar即可插入并选择:

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

Because you've executed it twice; 因为你已经执行了两次; once as ExecuteNonQuery() and once as ExecuteScalar(). 一次作为ExecuteNonQuery(),一次作为ExecuteScalar()。

because you are executing it twice: 因为你执行了两次:

   cmd1.ExecuteNonQuery(); //once

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

Get rid of cmd1.ExecuteNonQuery(); 摆脱cmd1.ExecuteNonQuery(); and just use the ExecuteScalar() . 并只使用ExecuteScalar()

The reason that your query executes twice is because you are calling both ExecuteNonQuery 查询执行两次的原因是因为您同时调用了ExecuteNonQuery
and ExecuteScalar on your command object. 和命令对象上的ExecuteScalar。

That's because you are executing it twice. 那是因为你要执行两次。

First here: 首先在这里:

cmd1.ExecuteNonQuery();

Then here: 然后在这里:

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

Remove the first one. 删除第一个。

You are executing it twice. 你正在执行它两次。

cmd1.ExecuteNonQuery(); // 1st

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

Delete one of these. 删除其中一个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM