我有一個問題,從Sql Server存儲過程返回一個輸出參數到一個C#變量。我已經閱讀了其他文章,不僅在這裏,而且在其他網站上,我不能得到它的工作。這是我現在擁有的。目前我只是試圖打印回來的價值。以下代碼返回一個空值。我試圖返回的是主鍵。我試過使用@@IDENTITY
和SCOPE_INDENTITY()
(即SET @NewId = SCOPE_IDENTITY()
)。在C#中使用存儲過程輸出參數
存儲過程:
CREATE PROCEDURE usp_InsertContract
@ContractNumber varchar(7),
@NewId int OUTPUT
AS
BEGIN
INSERT into [dbo].[Contracts] (ContractNumber)
VALUES (@ContractNumber)
Select @NewId = Id From [dbo].[Contracts] where ContractNumber = @ContractNumber
END
打開數據庫:
pvConnectionString = "Server = Desktop-PC\\SQLEXPRESS; Database = PVDatabase; User ID = sa;
PASSWORD = *******; Trusted_Connection = True;";
try
{
pvConnection = new SqlConnection(pvConnectionString);
pvConnection.Open();
}
catch (Exception e)
{
databaseError = true;
}
執行命令:
pvCommand = new SqlCommand("usp_InsertContract", pvConnection);
pvCommand.Transaction = pvTransaction;
pvCommand.CommandType = CommandType.StoredProcedure;
pvCommand.Parameters.Clear();
pvCommand.Parameters.Add(new SqlParameter("@ContractNumber", contractNumber));
SqlParameter pvNewId = new SqlParameter();
pvNewId.ParameterName = "@NewId";
pvNewId.DbType = DbType.Int32;
pvNewId.Direction = ParameterDirection.Output;
pvCommand.Parameters.Add(pvNewId);
try
{
sqlRows = pvCommand.ExecuteNonQuery();
if (sqlRows > 0)
Debug.Print("New Id Inserted = ",
pvCommand.Parameters["@NewId"].Value.ToString());
}
catch (Exception e)
{
Debug.Print("Insert Exception Type: {0}", e.GetType());
Debug.Print(" Message: {0}", e.Message);
}
}
我也使用SCOPE_IDENTITY()而不是重新查詢同一個表,並且如果你得到'查詢可以返回多個結果'的錯誤,當分配給單個輸出變量。 – JMC
我是否使用set命令來執行此操作?SET NewId = SCOPE_IDENTITY()?我用以下代碼替換了select語句... SET @NewId = SCOPE_IDENTITY()並且仍然收到空值。 – Gary
當然,您可以確認新記錄實際上已插入,對嗎?你可以展示更多的C#代碼(連接的打開,命令的創建等)。 – Steve