5

我正在尝试通过dataetimepicker's month and year value与类型的数据库列中存储的日期进行比较来获取 ID Date/Time,下面是我用来执行此操作的查询,但它在此行显示以下错误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

4 回答 4

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 视图中执行查询,那么它将显示此消息“输入参数值”。

在此处输入图像描述

于 2013-10-19T07:43:06.590 回答
1

您的查询中有错误,请参阅 lastname 列没有等号

where d.LastName + ' ' + d.FirstName = '
于 2013-10-19T07:36:54.933 回答
1

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

  • 检查这个 int month = dateTimePickerMonth.Value.Month; int 年 = dateTimePickerMonth.Value.Year;值不为 null 或为空

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

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

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

请检查这些条件并重试。

于 2013-10-19T07:41:45.740 回答
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;
于 2015-08-19T06:58:07.473 回答