我的服务器上有一个存储过程,插入一些参数并返回插入的ID
。我写一个表单很容易做到这一点,但我似乎无法得到传回的参数。C#SQL存储过程(插入) - 传递参数和检索参数
为了节省您一大堆可能毫无意义的阅读,最好只关注我的C#代码,让我知道我需要做什么才能传递参数并获得回报。
C#的Default.aspx
connection = new SqlConnection(ConfigurationManager.AppSettings["ConnectionInfo"]);
sql = "aStoredProc";
command = new SqlCommand(sql, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameter.Add(new SqlParameter("@FirstName", SqlDbType.VarChar)).Value = sFirstname;
command.Parameter.Add(new SqlParameter("@SurName", SqlDbType.VarChar)).Value = sSurname;
connection.Open();
int ID = command.ExecuteNonQuery();
connection.Close();
SQL aStoredProc
IF EXISTS(SELECT * FROM aTable WHERE ID = @ID)
-- User exists, update details
BEGIN
BEGIN TRAN
UPDATE aTable
SET
FirstName = @FirstName,
SurName = @SurName,
LastUpdate = GetDate()
WHERE ID = @ID
IF (@@Error != 0)
ROLLBACK TRAN
ELSE
COMMIT TRAN
END
ELSE
-- New user
BEGIN
BEGIN TRAN
INSERT aTable (
FirstName,
SurName,
GetDate()
)
VALUES (
@FirstName,
@SurName,
@LastUpdate
)
SELECT @ID = @@IDENTITY
IF (@@Error != 0)
ROLLBACK TRAN
ELSE
COMMIT TRAN
END
参数@ID
在存储过程被列为:
@ID (int, Input/Output, No default)
和proc有'返回整数'。这用于在SQL Server 2005升级之前使用VBA解决方案正常工作。
在此先感谢。
见http://stackoverflow.com/questions/8633821/ scope-identity-always-returning-0/8633835#8633835相似的问题/答案。 –
你在存储过程中有一个逻辑缺陷。 (在else'new user'分支中):在检查@@ ERROR之前执行的任何语句都将重置@@ ERROR –
我还建议使用** SCOPE_IDENTITY()**而不是其他任何操作来获取新插入的标识值。 [请参阅此博客文章,了解有关WHY的解释](http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity -of-record /) –