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.

SqlDataReader 需要一个不丢失的参数

if 语句中有 add 参数语句。 如果 if 失败,则无需执行任何操作,但该过程将失败。 添加一个 else 语句,该语句引发错误或将参数设置为默认值(如果不存在)。

还要检查 Master.CompanyId 是否为空。 这可能会导致错误。 最后,Add 方法可能无法正常工作。

尝试添加值。

您是否尝试运行 SQL 探查器以查看传递给存储过程的参数是什么? 您可以查看这些参数以及数据库中的逻辑对您来说是否正确。(您没有在问题中发布)

此外,还需要将命令类型指定为 StorageProcedure。

我可以观察到两件事

  1. 命令类型类型,将其设置为 StoredProcedures

  2. 公司 ID 中的空值。

尝试传递一些硬编码值,看看是否有效。有时在空中它说同样的话。并在您的 sp 中将您的参数声明为 @companyId int =null ,以便它也可以接受空值。