SqlDataReader 需要一个不丢失的参数
本文关键字:参数 一个 SqlDataReader | 更新日期: 2023-09-27 18:33:02
我遇到了错误没有意义的问题。即时窗口显示参数未丢失,但调试器表示缺少参数。CP没有人对此有答案。
错误:过程或函数"cpWeeklyPharmDataintDrvr"需要参数"@companyID",但未提供。
即时窗口:
cmd.Parameters["@companyID"].Value 1356
SqlCommand cmd = new SqlCommand("cpWeeklyPharmDataintDrvr", sqlC);
sqlC.Open();
cmd.Parameters.Add(new SqlParameter("@companyID", SqlDbType.Int)).Value = Master.CompanyId;
cmd.Parameters.Add(new SqlParameter("@sStartDate", SqlDbType.NVarChar, 30)).Value = Master.StartDate;
cmd.Parameters.Add(new SqlParameter("@sEndDate", SqlDbType.NVarChar, 30)).Value = Master.EndDate;
if (Master.RegionId > 0)
cmd.Parameters.Add(new SqlParameter("@region", SqlDbType.Int)).Value = Master.RegionId;
if (Master.DistrictId > 0)
cmd.Parameters.Add(new SqlParameter("@district", SqlDbType.Int)).Value = Master.DistrictId;
if (Master.StoreId . 0)
cmd.Parameters.Add(new SqlParameter("@store", SqlDbType.NVarChar)).Value = Master.StoreId.ToString();
SqlDataReader dR = cmd.ExecuteReader(); // This is where error occurs.
if 语句中有 add 参数语句。 如果 if 失败,则无需执行任何操作,但该过程将失败。 添加一个 else 语句,该语句引发错误或将参数设置为默认值(如果不存在)。
还要检查 Master.CompanyId 是否为空。 这可能会导致错误。 最后,Add 方法可能无法正常工作。
尝试添加值。
您是否尝试运行 SQL 探查器以查看传递给存储过程的参数是什么? 您可以查看这些参数以及数据库中的逻辑对您来说是否正确。(您没有在问题中发布)
此外,还需要将命令类型指定为 StorageProcedure。
我可以观察到两件事
-
命令类型类型,将其设置为
StoredProcedures
-
公司 ID 中的空值。
尝试传递一些硬编码值,看看是否有效。有时在空中它说同样的话。并在您的 sp 中将您的参数声明为 @companyId int =null
,以便它也可以接受空值。