2017-06-06 59 views
0

我有一個基本的存儲過程C#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 = @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運行,它返回以下錯誤:

ERROR [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Procedure or function 'GetOrdersEmailContent' expects parameter '@Name', which was not supplied.

任何人都可以建議嗎?我已經查看了其他類似的問題,但沒有解決方案適用或解決問題

+0

你可以試試這個'DbCommand.Parameters.Add( 「@名稱」,OdbcType.NVarChar,50).value的= TEMPLATENAME;' –

+0

你肯定' templateName'不是null? – jamiedanq

+0

Kashi_rock - 恐怕這沒有什麼區別 – CarlG

回答

0

考慮到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(); 
相關問題