Vra

Ek wil waardes van databasis filter gebaseer op datum.

Datum in 'n databasis bevat waardes soos hierdie: 2008/12/28 18:00:00. En my klas het 'n Datum tyd veranderlike afhangend van wat ek wil om te filter. Die ideaal sou dit werk soos volg: myBindingSource.Filter = "DATE(myDateField) = myDateTime.Date" + aanpassing myDateTime.Date formaat as wat nodig is.

Maar dit gooi 'n EvaluateException: ". Die uitdrukking bevat undefined funksie oproep DATUM ()"

Hoewel as ek die SQL-stelling direk uit te voer, kan ek die datum () funksie in filter gebruik.

post scriptum. Ek gebruik MYSQL databasis met die Connector / Net 5,2

Hoe kan ek hierdie probleem op te los?

Baie dankie aan almal vir voorstelle.

Was dit nuttig?

Oplossing

Die getSqlDate funksie is nie nodig nie. Jy kan String.Format () gebruik om formaat datums:

String.Format("{0:yyyy-MM-dd} 00:00:00", myDateTime)

OR

myDateTime.Date.ToString("yyyy-MM-dd") + " 00:00:00"

Jy kan die bindende bron soos hierdie filter:

myBindingSource.Filter = String.Format("myDateField >= '{0:yyyy-MM-dd}' AND myDateField < '{1:yyyy-MM-dd}'", myDateTime, myDateTime.AddDays(1));

Ander wenke

Dankie Tom H.

Ja, ek wou die tyd gedeelte van die datum tyd in die filter uit te skakel en jou voorstel werk perfek.

`ll laat die volledige oplossing vir ander:

myBindingSource.Filter = "myDateField >= '" + getSqlDate(myDateTime) + "' AND myDateField < '" + getSqlDate(myDateTime.AddDays(1)) + "'";

waar getSqlDate funksie is:

string getSqlDate(DateTime date) {
    string year = "" + date.Year;
    string month = (date.Month < 10) ? "0" + date.Month : "" + date.Month;
    string day = (date.Day < 10) ? "0" + date.Day : "" + date.Day;

    return year + "-" + month + "-" + day + " 00:00:00";
}

'n regstelling na die antwoord: Accoring om MSDN , Om die korrekte datum te kry die mm in

yyyy-mm-dd

sou moes word gekapitaliseer soos so;

yyyy-MM-dd

'n korrek geformateer datum kry.

Is myDateField die naam van die veld in die datastel? Ek dink jy wil 'n uitdrukking soos volg:

myBindingSource.Filter = "myDateField = " & myDateTime.Date.ToString()

Is jy vra hoe om die tyd gedeelte van die datum tyd in die filter uit te skakel? Ek is nie te vertroud is met MySQL, maar as jy enige soort funksie wat die datum gedeelte van 'n datum tyd terug gebruik dan is jy waarskynlik 'n kans om met behulp van 'n indeks op daardie kolom vir die navraag (bestaande of toekomstige indeks) dood te maak.

Jou beste bet is om 'n filter op die voorkant wat tjeks vir 'n reeks wat slegs vir jou gegee filter datum skep. Byvoorbeeld:

myBindingSource.Filter = "myDateField >= " & <code to create a string representing 12AM of your date> &
" myDateField < " & <code to create a string for 12AM of the next day>

Jammer om nie met presiese kode, maar ek is 'n SQL ontwikkelaar en my gebrek aan VB / C # vaardighede sal my vereis om 'n baie meer tyd neem om te kom met die funksies dan sal dit jou waarskynlik. :)

Vir search tussen twee datum in DataGridView kan jy hierdie kode gebruik:

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

BindingSource1: my datagridview datasourc vrag in BindingSource1. F5: naam van jou kop kolom in datagridview. maskedTextBox1 want kry eerste datum. maskedTextBox2:. vir kry tweede datum

Wees suksesvol "Arn_7"

Vir search tussen twee datum in DataGridView kan jy hierdie kode gebruik:

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

BindingSource1 : my datagridview datasourc load in BindingSource1 .
F5             : name of your header column in datagridview . 
maskedTextBox1 : for get first date .
maskedTextBox2 : for get second date .
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top