将参数传递给C#中的存储过程

Posted

技术标签:

【中文标题】将参数传递给C#中的存储过程【英文标题】:passing parameters to a stored procedure in C# 【发布时间】:2011-07-22 03:34:59 【问题描述】:

如何将三个参数a发送到sql中的存储过程?

这是我的错误:过程或函数 GetIslemIdleri 指定了太多参数。

这是我的存储过程:

CREATE PROCEDURE GetIslemDetayIdleri 

@islemId int,
@dovizTanim nvarchar(10),
@yapilanIslemTuru nvarchar(20)
AS
BEGIN
    SET NOCOUNT ON;

SELECT ([t0].[TOPLAMTUTAR]) + ([t0].[KDVTUTAR]) AS [value]
FROM [dbo].[TBLP1ISLEMDETAY] AS [t0]
INNER JOIN [dbo].[TBLP1ISLEM] AS [t1] ON [t1].[ID] = [t0].[ISLEM_ID]
WHERE ([t0].[ISLEM_ID] = @islemId) AND 
      ([t0].[FIYATBIRIM] = @dovizTanim) AND 
      ([t1].[YAPILANISLEM] = @yapilanIslemTuru) AND 
      ([t0].[KDVDAHILMI] = 0)
END

这是我的代码:

        decimal kurToplamQuery = 0;
        string connString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer1"].ConnectionString;

        SqlConnection sqlConn = new SqlConnection(connString);
        sqlConn.Open();

        SqlCommand cmd;

        cmd = new SqlCommand("GetIslemIdleri", sqlConn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@islemId", SqlDbType.Int)).Value = islemId;
        cmd.Parameters.Add(new SqlParameter("@dovizTanim", SqlDbType.NVarChar)).Value = dovizTanim;
        cmd.Parameters.Add(new SqlParameter("@yapilanIslemTuru", SqlDbType.NVarChar)).Value = yapilanIslemTipi;

        using (var reader = cmd.ExecuteReader())*//error occurs here*
        
            while (reader.Read())
            
                kurToplamQuery = reader.GetDecimal(0);                    
            
        
        sqlConn.Close();
        return kurToplamQuery;

感谢您的帮助。

【问题讨论】:

是你没有调用发布的存储过程的问题吗?他们有不同的名字。 【参考方案1】:

存储过程名为GetIslemDetayIdleri,但代码使用的是名为GetIslemIdleri 的存储过程。也许后者的参数比前者少,而您是想在代码中调用前者?

【讨论】:

@EmreVeriyaz:这发生在我们最好的人身上。永远不要低估对你的代码进行第二次观察的价值,即使只是为了寻找小东西。【参考方案2】:

您的存储过程:GetIslemDetayIdleri 的名称与您的调用不同:

cmd = new SqlCommand("GetIslemIdleri", sqlConn);

【讨论】:

【参考方案3】:

GetIslemDetayIdleri != GetIslemIdleri

【讨论】:

【参考方案4】:

在我的情况下,此代码有效。我希望这适用于您的情况过程参数名称、类型和长度必须相同 像这样

       cmd.Parameters.Add(new SqlParameter("@islemId", SqlDbType.Int)).Value = islemId;
            cmd.Parameters.Add(new SqlParameter("@dovizTanim", SqlDbType.NVarChar ,10)).Value = dovizTanim;
            cmd.Parameters.Add(new SqlParameter("@yapilanIslemTuru", SqlDbType.NVarChar,20)).Value = yapilanIslemTipi;

【讨论】:

以上是关于将参数传递给C#中的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给c#中的sql存储过程

将 xml 作为参数传递给 SQL Server 中的存储过程

是否可以将可变数量的参数传递给redshift中的存储过程?

当参数之一是列表时,如何将参数传递给 NHibernate 中的存储过程?

将参数传递给 AS400 中的存储过程以匹配 IN 键

使用 Mybatis 将布尔参数传递给存储过程