SqlDataReader期望一个不缺少的参数

时间:2013-09-26 22:31:01

标签: c# sql sql-server

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

3 个答案:

答案 0 :(得分:0)

if语句中包含add参数语句。如果if失败,则不执行任何操作,但过程将失败。添加一个抛出错误的else语句,或者将参数设置为默认值(如果不存在)。

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

尝试AddWithValue。

答案 1 :(得分:0)

您是否尝试运行SQL事件探查器以查看传递给存储过程的参数是什么?你可以看到这些参数是否与你在数据库中的逻辑一起正确。 (你没有在问题中发帖)

此外,您还需要将commandtype指定为StoredProcedure。

答案 2 :(得分:0)

我可以观察两件事

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

  2. 公司ID中的空值。

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