C#Odbc存储过程调用-过程或函数需要未提供的参数

C#Odbc存储过程调用-过程或函数需要未提供的参数,c#,.net,sql-server,odbc,C#,.net,Sql Server,Odbc,我有一个基本的存储过程 ALTER PROCEDURE [dbo].[GetOrdersEmailContent] @Name nvarchar(50), @Body nvarchar(2000) OUTPUT AS BEGIN --SET NOCOUNT ON SET @Body = (SELECT Content FROM ORDERS_tblEmailContent WHERE Name

我有一个基本的存储过程

ALTER PROCEDURE [dbo].[GetOrdersEmailContent] 
    @Name nvarchar(50),
    @Body nvarchar(2000) OUTPUT
AS
BEGIN
    --SET NOCOUNT ON
    SET @Body = (SELECT Content 
                 FROM ORDERS_tblEmailContent
                 WHERE Name = @Name)
END
我用下面的代码从C#呼叫它

using (DbConnection)
{
    DbConnection.Open();

    using (OdbcCommand DbCommand = DbConnection.CreateCommand())
    {
        DbCommand.CommandType = CommandType.StoredProcedure;
        DbCommand.CommandText = " GetOrdersEmailContent";

        DbCommand.Parameters.Add("@Name", OdbcType.NVarChar, 50);
        DbCommand.Parameters["@Name"].Value = templateName;
        DbCommand.Parameters["@Name"].Direction = ParameterDirection.Input;

        DbCommand.Parameters.Add("@Body", OdbcType.NVarChar, 2000);
        DbCommand.Parameters["@Body"].Value = DBNull.Value;
        DbCommand.Parameters["@Body"].Direction = ParameterDirection.Output;

        DbCommand.ExecuteNonQuery();

        emailBody = DbCommand.Parameters["@Body"].Value.ToString();   
    }
}

DbConnection.Close();
运行
ExecuteNonQuery
时,它返回以下错误:

错误[42000][Microsoft][SQL Server本机客户端11.0][SQL Server]过程或函数“GetOrdersEmailContent”需要未提供的参数“@Name”


有人能提供建议吗?我查看了其他类似的问题,但没有一个解决方案适用或解决该问题

考虑到
templateName
不是空的。无需为
@Name
指定方向:

using (DbConnection)
        {
            DbConnection.Open();
            using (OdbcCommand DbCommand = DbConnection.CreateCommand())
            {
                DbCommand.CommandType = CommandType.StoredProcedure;
                DbCommand.CommandText = " GetOrdersEmailContent";

                DbCommand.Parameters.Add("@Name", OdbcType.NVarChar, 50);
                DbCommand.Parameters["@Name"].Value = templateName;

                DbCommand.Parameters.Add("@Body", OdbcType.NVarChar, 2000);
                DbCommand.Parameters["@Body"].Value = DBNull.Value;
                DbCommand.Parameters["@Body"].Direction = ParameterDirection.Output;

                DbCommand.ExecuteNonQuery();

                emailBody = DbCommand.Parameters["@Body"].Value.ToString();   
            }
        }
        DbConnection.Close();

你能试试这个
DbCommand.Parameters.Add(“@Name”,OdbcType.NVarChar,50)吗
你确定
templateName
不是空的吗?Kashi_rock-恐怕这没有什么区别。一般来说,你需要检查“可空”参数。无论这是否解决了问题,您都应该将@Name的“设置值”代码更改为。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。DbCommand.Parameters[“@Name”].Value=string.IsNullOrEmpty(templateName)?(object)DBNull.Value:templateName;而且它解决您的问题的可能性很小