取出存取过程插入记录后返回的ID 遇到的奇怪问题
这是存储过程:(直接在存储过程中置信没有问题)
ALTER PROCEDURE dbo.orderProc
@orderUser nvarchar(20)
AS
INSERT INTO myOrder (orderUser) VALUES (@orderUser)
Select @@IDENTITY as orderId
RETURN
事件代码c#:
protected void BtnCartOk_Click(object sender, EventArgs e)
{
IDbConnection conn = null;
string orderUser = "hh ";
//string orderUser = Session[ "userName "];
try
{
ConnectionStringSettings connSet = ConfigurationManager.ConnectionStrings[ "MYConnectionString "];
conn = new SqlConnection(connSet.ConnectionString);
conn.Open();
string sql = string.Format( "exec orderProc {0} ", orderUser);
SqlCommand com = new SqlCommand(sql, (SqlConnection)conn);
com.ExecuteNonQuery();
int x = Convert.ToInt32(com.ExecuteScalar());//这行取出存取过程返回的记录ID, 怎么有了这行之后,就每次都会插入两条数据.而注释掉后就正常插入了?
Response.Write(x);
conn.Close();
Context.Server.Transfer(Request.CurrentExecutionFilePath);
}
------解决方案--------------------1。
怎么有了这行之后,就每次都会插入两条数据.而注释掉后就正常插入了?
=======
因为实际上,你调用了两次同一个存储过程!!!
com.ExecuteNonQuery();
和
int x = Convert.ToInt32(com.ExecuteScalar());
各执行了一次
注释调 com.ExecuteNonQuery(); 即可
2。
事实上,对于此情形,最佳方式使用 输出参数 来返回 @@IDENTITY