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を使用しています。
はい、あなたは正しいですdeptNameはC#でnullと等しいです。常にnullになるわけではありません。ユーザーがフィルタリングのために値を入力したい場合は、deptNameにフィルタを適用する必要があります。 –
その選択は今問題ではありません。あなたが 'null'を取った瞬間、例外を取り除くためにC#null以外のものにパラメータ値を設定する必要があります。 '?? '演算子はそれだけを行います - 最初が' null'ならば2番目の値を使います。 – Rafal
ありがとうございます –