2017-04-05 31 views
0

我陷入了一個問題。我收到錯誤「過程或函數'SP_RPT_User'需要參數'@deptName',它沒有提供。」在提供參數的c#應用程序中。即使我複製並取代了名字。仍然沒有成功。存儲過程期望通過其提供的某些輸入

public DataTable SP_RPT_User(int loggedid, String deptName, String OfficeName, String empType) 
    { 
     int updatedrows = 0; 

     DataTable table = new DataTable(); 
     try 
     { 
      cCommand = new System.Data.SqlClient.SqlCommand("SP_RPT_User", connection); 
      cCommand.CommandType = CommandType.StoredProcedure; 

      cCommand.Parameters.Add("@loggedId", SqlDbType.Int).Value = loggedid; 
      cCommand.Parameters.Add("@deptName", SqlDbType.NVarChar, 200).Value = deptName; 
      cCommand.Parameters.Add("@OfficeName", SqlDbType.VarChar, 150).Value = OfficeName; 
      cCommand.Parameters.Add("@empType", SqlDbType.VarChar, 150).Value = empType; 


      cCommand.CommandTimeout = 90000; 
      connection.Open(); 
      updatedrows = cCommand.ExecuteNonQuery(); 

      using (var da = new SqlDataAdapter(cCommand)) 
      { 
       cCommand.CommandType = CommandType.StoredProcedure; 
       da.Fill(table); 
      } 

     } 
     catch (Exception Ex) 
     { 
      connection.Close(); 
      // return -100; 
     } 
     finally 
     { 
      connection.Close(); 
     } 

     return table; 

    } 

存儲過程

ALTER PROCEDURE [dbo].[SP_RPT_User] 
-- Add the parameters for the stored procedure here 
@loggedId int, 
@deptName NVarChar(200), 
@OfficeName varchar(150), 
@empType varchar(150) 

AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 



declare @sql nvarchar(max); 
set @sql ='SELECT ...'; // here is one query 

    if(@deptName != '') 
     set @sql = @sql + ' and dbo.TB_Department.name like ''%'[email protected]+'%'''; 

    Declare @params nvarchar(500) 
    SELECT @params ='@loggedId int,'+ 
    '@deptName NVarChar(200),'+ 
    '@OfficeName varchar(150),'+ 
    '@empType varchar(150)' 


    exec sp_executesql @sql, @params,@loggedId,@deptName,@OfficeName,@empType; 


END 

誰能幫助。提前致謝。 我正在使用sql server 2014和vs2015。

回答

1

我所受的教育猜測是在執行查詢時,C#中的deptName值爲null。在這種情況下,你應該通過DBNull.Value有null作爲參數值:

var param = cCommand.Parameters.Add("@deptName", SqlDbType.NVarChar, 200); 
param.Value = deptName ?? DBNull.Value; 

從你的程序中我看到你與空字符串比較,以便使用?? string.Empty以滿足該條件。

+0

是的,你是正確的C#中的deptName等於null。但它並不總是空的。如果用戶想要過濾任何值,那麼我必須對deptName應用過濾器。 –

+0

現在這個選擇並不重要。在你有'null'的時刻,你需要將參數值設置爲除C#之外的其他值以消除異常。 ''''操作符會做到這一點 - 如果第一個值爲null,則使用第二個值。 – Rafal

+0

感謝它的工作 –

相關問題