[英]Varchar value not passing into SQL Server stored procedure
以下是我的代碼來調用存儲過程:
SqlCommand commandSql = new SqlCommand("GetbyProgramID")
commandSql.CommandType = CommandType.StoredProcedure;
//commandSql.Parameters.Add("@program_id", SqlDbType.VarChar, 5, programID);
commandSql.Parameters.Add("@program_id", System.Data.SqlDbType.VarChar, 5).Value = programID;
SqlParameter returnValue = new SqlParameter("@result", SqlDbType.Int);
returnValue.Direction = ParameterDirection.Output;
commandSql.Parameters.Add(returnValue);
DBAccessHelper.Execute(commandSql);
var result = returnValue.Value != System.DBNull.Value ? returnValue.Value.ToString() : string.Empty;
return result;
這是我的存儲過程:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar,
@result int OUTPUT
AS
BEGIN
SELECT @result = system_id
FROM dbo.agency_mapping
WHERE program_id = @program_id
RETURN
END
我的C#代碼中總是得到空值。
不知道我在做什么錯。
我傳遞的值是正確的。
缺少重要的東西嗎?
您已經聲明
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar,
@result int OUTPUT
這意味着您的存儲過程接收到一個名為@program_id的參數,大小為1個字符。 由於這個原因,您的SELECT可能失敗。
嘗試聲明
ALTER PROCEDURE [dbo].[GetbyProgramID]
@program_id varchar(5),
@result int OUTPUT
根據您的C#代碼。
不要刪除C#代碼中的大小,因為讓Sql Server Engine准備優化計划很有用,如果您第二次調用查詢,該計划可以重用。
此處的模式信息: 數據訪問代碼如何影響數據庫性能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.