C# 为什么我的SQL';插入';语句执行两次?
我有下面的Insert命令,我需要获取作用域标识,以便稍后在应用程序中进行订单跟踪C# 为什么我的SQL';插入';语句执行两次?,c#,asp.net,sql,sql-server,C#,Asp.net,Sql,Sql Server,我有下面的Insert命令,我需要获取作用域标识,以便稍后在应用程序中进行订单跟踪 SqlCommand cmd1 = new SqlCommand("INSERT INTO [pharm_OrderID](UserID, RequestType, CreateDate) values (@UserID, @RequestType, @CreateDate); Select SCOPE_IDENTITY();", conn1); cmd1.CommandT
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();
但是为什么要插入两次呢?您要执行两次
cmd1.ExecuteNonQuery()代码>
Convert.ToString(cmd1.ExecuteScalar())代码>
ExecuteScalar
:
decimal newID = (decimal) cmd1.ExecuteScalar();
因为你已经执行了两次;一次作为ExecuteOnQuery()执行,一次作为ExecuteScalar()。因为要执行两次:
cmd1.ExecuteNonQuery(); //once
string numScope = Convert.ToString(cmd1.ExecuteScalar()); //twice
摆脱
cmd1.ExecuteNonQuery()只需使用ExecuteScalar()
查询执行两次的原因是您同时调用了ExecuteNonQuery
和命令对象上的ExecuteScalar。这是因为您要执行它两次
首先:
cmd1.ExecuteNonQuery();
那么这里:
string numScope = Convert.ToString(cmd1.ExecuteScalar());
删除第一个。执行两次
cmd1.ExecuteNonQuery(); // 1st
string numScope = Convert.ToString(cmd1.ExecuteScalar()); // 2nd
删除其中一个。提示:您可能需要查看使用语句来处理连接和命令实例。