我正在尝试通过将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;
答案 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视图中执行查询,则会显示此信息 消息“输入参数值”。
答案 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;