我的服務器上有一個存儲過程,插入一些參數並返回插入的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 /) –