0

我遇到了一个错误没有意义的问题。即时窗口说参数没有丢失,但调试器说它丢失了。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.
4

3 回答 3

0

您在 if 语句中有 add 参数语句。如果 if 失败,您什么也不做,但过程将失败。添加抛出错误或将参数设置为默认值(如果参数不存在)的 else 语句。

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

试试 AddWithValue。

于 2013-09-26T22:59:59.233 回答
0

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

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

于 2013-09-26T23:20:25.173 回答
0

我可以观察到两件事

  1. CommandType 的类型,将其设置为StoredProcedures

  2. 公司 ID 中的空值。

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

于 2013-09-27T05:10:32.937 回答