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。
是的,你是正確的C#中的deptName等於null。但它並不總是空的。如果用戶想要過濾任何值,那麼我必須對deptName應用過濾器。 –
現在這個選擇並不重要。在你有'null'的時刻,你需要將參數值設置爲除C#之外的其他值以消除異常。 ''''操作符會做到這一點 - 如果第一個值爲null,則使用第二個值。 – Rafal
感謝它的工作 –