错误:没有给出一个或多个必需参数的值

时间:2013-10-19 07:21:32

标签: c# ms-access

我正在尝试通过将dataetimepicker's month and year value与存储在Date/Time类型的数据库列中的日期进行比较来获取ID,以下是我正在使用的查询,但它显示了以下内容此行while (rs.Read())

的错误

错误

No value given for one or more required parameters.

代码

public int GetDrID_MonthWise(string DrName,int month,int year, int refDrID)
{
    int data = 0;
    try
    {
        string sql = "Select d.DoctorID From Doctor_Master d,Patient_registration p where d.LastName + ' ' + d.FirstName = '" + DrName + "' AND datepart(mm,p.[RegDate])=@month AND datepart(yyyy,p.[RegDate])=@year AND p.DoctorID=" + refDrID;
        cmd = new OleDbCommand(sql, acccon);
        cmd.Parameters.AddWithValue("@month", month);
        cmd.Parameters.AddWithValue("@year", year);
        rs = cmd.ExecuteReader();
        while (rs.Read())
        {
            data = Convert.ToInt32(rs[0]);
        }
    }
    catch (Exception err)
    {
        MessageBox.Show(err.Message.ToString());
    }
    return data;
}

我正在传递像这样的月份和年份值,我在哪里做错了?

int month = dateTimePickerMonth.Value.Month;
int year = dateTimePickerMonth.Value.Year;

4 个答案:

答案 0 :(得分:3)

您的查询中有错误,请这样做,

 string sql = "Select d.DoctorID From Doctor_Master d,Patient_registration p where d.LastName + ' ' + d.FirstName = '" + DrName + "' AND datepart("m",p.[RegDate])=@month AND datepart("yyyy",p.[RegDate])=@year AND p.DoctorID=" + refDrID;

注意:您必须在ms访问的DatePart函数中使用“”括起日期间隔,并且每月只有一个m。如果你没有用“”括起yyyy和m,系统认为yyyy和m是这些参数的参数和期望值。

  

如果在Ms-Aceess sql视图中执行查询,则会显示此信息   消息“输入参数值”。

enter image description here

答案 1 :(得分:1)

您的查询中存在错误, 看到没有等于姓氏列的标志

where d.LastName + ' ' + d.FirstName = '

答案 2 :(得分:1)

我认为你需要检查3个问题

  
      
  • 检查此int month = dateTimePickerMonth.Value.Month; int year = dateTimePickerMonth.Value.Year;值不为null或为空

  •   
  • 日期和时间是日期时间数据类型,那么为什么要以整数分配此值?所以它被转换成不同的格式。

  •   
  • 并且您的d.LastName列值为null,如果您给出空值,请尝试   这样

  •   
d.LastName = '"+ string.Empty + " ',.. ..... 

请检查这些条件,然后重试。

答案 3 :(得分:0)

或简单地在字符串中进行更正

sql = "Select d.DoctorID From Doctor_Master d,Patient_registration p where d.LastName + ' ' + d.FirstName = '" + DrName + "' AND Format(p.[RegDate],mm)=@month AND Format(p.[RegDate],'yyyy')=@year AND p.DoctorID=" + refDrID;