簡體   English   中英

Varchar值未傳遞到SQL Server存儲過程

[英]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准備優化計划很有用,如果您第二次調用查詢,該計划可以重用。

此處的模式信息: 數據訪問代碼如何影響數據庫性能

將您的SP更改為

 @program_id  varchar(5)

編輯 :基於史蒂夫的答案,我已經更新了刪除參數的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM