我意識到這個問題已經被回答過了,我已經查看了答案,試圖找到我的方式的錯誤,但是處於停滯狀態。我有以下存儲過程應該返回一個唯一的密鑰。用c輸出參數運行存儲的sql程序#
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[newid] @tablename AS CHAR(10), @fieldname AS CHAR(15) = '', @ioffset AS INT, @theID as int = 0 output
AS
BEGIN
SET NOCOUNT ON
DECLARE @value AS INT
IF @ioffset < 1 SET @ioffset = 1
IF LEN(@fieldname) > 0
BEGIN
UPDATE id SET @value = CONVERT(INT,cvalue)[email protected], cvalue = CONVERT(CHAR,(CONVERT(INT,cvalue)[email protected])) WHERE UPPER(ctablename) = UPPER(@tablename) AND UPPER(cfieldname) = UPPER(@fieldname)
SELECT @value
END
ELSE
BEGIN
UPDATE id SET @value = CONVERT(INT,cvalue)[email protected], cvalue = CONVERT(CHAR,(CONVERT(INT,cvalue)[email protected])) WHERE UPPER(ctablename) = UPPER(@tablename)
SELECT @value
End
SET NOCOUNT OFF
set @theID = @value
END
我使用下面的代碼嘗試訪問的過程:
using(SqlConnection connection = new SqlConnection(connectionString))
using(SqlCommand command = new SqlCommand("dbo.NewID", connection)
{ CommandType = CommandType.StoredProcedure })
{
command.Parameters.Add(new SqlParameter("@tablename",table));
command.Parameters.Add(new SqlParameter("@fieldname",field));
command.Parameters.Add(new SqlParameter("@ioffset",1));
SqlParameter key = new SqlParameter("@theID", SqlDbType.Int);
key.Direction = ParameterDirection.Output;
command.Parameters.Add(key);
connection.Open();
result = command.ExecuteNonQuery();
connection.Close();
}
key.Value是回來了空,結果是-1,暗示有正在運行的程序錯誤。如果有人看到我可能做錯了,我將不勝感激這種幫助。
只是說明:我不能編輯實際的過程,因爲有幾個類已經使用它。
非常感謝您的幫助。
我建議你編寫你自己的測試程序,它簡單地使用參數並返回輸出,這樣你就可以確保你的command.Parameters邏輯是正確的。然後逐步添加邏輯以達到您的原始要求。使用{}使用+1! – n8wrl 2012-07-25 19:34:41
你確定你打電話給你的程序嗎?你有沒有嘗試分析你的電話,看看發送了什麼? – 2012-07-25 19:35:03
另一個想法 - 如果您在創建命令對象之前打開連接,該怎麼辦? – n8wrl 2012-07-25 19:35:45