2013-10-19 31 views
5

Date/Time türünde veritabanı sütununda depolanan tarihle dataetimepicker'smonth and year value karşılaştırarak Kimliği Al'ı denemeye çalışıyorum, Bunu yapmak için şu anda kullanıyorum ama aşağıdaki hata gösteriyor Bu hatta while (rs.Read())hatası: Bir veya daha fazla gerekli parametre için verilen bir değer yok

hata

No value given for one or more required parameters. 

Kod

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])[email protected] AND datepart(yyyy,p.[RegDate])[email protected] 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; 
} 

Ay ve yıl değerlerini böyle geçiyorum, Nerede hata yapıyorum? senin Query bir hata var

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

başka hangi değerleri hakkında Düzeltme? Belki de DrName veya refDrID ile olası – VladL

+0

mümkün çift http://stackoverflow.com/questions/19197022/getting-error-no-value-given-for-one-ve-more-required-parameters – Coder

cevap

3

, böyle

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

Not yapın: Sen DATEPART içinde ms erişim fonksiyonu ve ay için sadece tek m "" ile kapalı tarih aralığına sahiptir. Yyyy ve m "yi" ile kapatmamışsanız, sistem yyyy ve m'nin bu parametre için parametre ve beklenen değer olduğunu varsaymıştır.

Eğer Ms-Aceess sql görünümünde sorgu yürütmek durumunda

o zaman bu mesajı "parametrenin içine değerini gir" gösterecektir.

enter image description here

1

, lastname sütun için imzalamak için hiç eşit olduğunu görmek

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

Sana 3 sorunlarını

  • kontrol etmek gerek Bu int ayını kontrol et = dateTimePickerMonth.Value.Month; int year = dateTimePickerMonth.Value.Year; değerler boş veya boş değil

  • Tarih ve saat bir datetime veri türü, bu yüzden bu değeri tamsayı olarak atarsınız? Yani farklı biçime dönüştürülür.

  • Ve d.LastName sütun değeri boş değerleri vermek, o zaman bu koşulları kontrol edin ve tekrar deneyin bu yolu

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

deneyin boş. Sorgunuzda hata vardır

0

Veya Basitçe olun nereye kısmen dize

sql = "Select d.DoctorID From Doctor_Master d,Patient_registration p where d.LastName + ' ' + d.FirstName = '" + DrName + "' AND Format(p.[RegDate],mm)[email protected] AND Format(p.[RegDate],'yyyy')[email protected] AND p.DoctorID=" + refDrID; 
İlgili konular