C # SQL выберите дату проблемы - PullRequest
0 голосов
/ 28 февраля 2011

Я новичок в c # У меня проблемы с SQL и DATE в этом запросе у меня ошибка ...

ОШИБКА [22018] [Microsoft] [ODBC dBase Драйвер] Несоответствие типов данных критериям выражение.

    private void button2_Click(object sender, EventArgs e)
        {
            char split = '.';
            string[] s = dateTimePicker1.Text.Split(split);
            string sx = s[0] + "." + s[1] + ".";


            System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
            oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;
SourceDB=C:\sales\;Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
            oConn.Open();
            System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
            oCmd.CommandText = @"SELECT COD,PRICE,SMAN_COD FROM C:\sales\sl.DBF WHERE DATE='"+dateTimePicker1.Text+"'";
            DataTable dt = new DataTable();
            dt.Load(oCmd.ExecuteReader());
            oConn.Close();

            dataGridView1.DataSource = dt;

        }

Пожалуйста, помогите мне

Ответы [ 5 ]

7 голосов
/ 28 февраля 2011

Не отправляйте значение даты / времени в SQL вообще. Используйте параметризованный запрос - таким образом вам не нужно заботиться о формате. Зачем усложнять вещи и оставлять себя открытыми для тонких проблем, когда вы можете передавать данные, не анализируя и не форматируя их?

Кроме того, если вы привыкли использовать параметры для всех значений, вы избежите атак с использованием SQL-инъекций.

В этом случае вы бы использовали DateTimePicker.Value вместо DateTimePicker.Text, чтобы получить значение как DateTime.

2 голосов
/ 28 февраля 2011

Попробуйте использовать Параметризованные запросы, чтобы избежать инъекций Sql

ooops, OdbcCommand кажется другим с SqlCommand для параметризованных запросов.

Изменить

System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = @"SELECT COD,PRICE,SMAN_COD FROM C:\sales\sl.DBF WHERE DATE='"+dateTimePicker1.Text+"'";

К

System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
oCmd.CommandText = @"SELECT COD,PRICE,SMAN_COD FROM C:\sales\sl.DBF WHERE DATE=?";
oCmd.Parameters.Add ("DATE", OdbcType.DateTime).Value = dateTimePicker1.Value;

Надеюсь, это поможет вам!

2 голосов
/ 28 февраля 2011

Если вы хотите убедиться, что дата, отправленная в базу данных, правильно отформатирована, я бы порекомендовал следующий формат даты:

yyyy-MM-dd

Насколько мне известно, это будет работать независимо от культуры вашего компьютера и компьютера, на котором работает сервер базы данных.

Этот формат называется ISO 8601.

1 голос
/ 28 февраля 2011

Я думаю, что проблема в том, что ваша Дата выхода имеет формат 12/01/2011

Если это так.вам нужно преобразовать его в 2010-01-12

DateTimePicker, который, я думаю, имеет свойство SelectedDate вместо Text

Если это так, то

используйте:

String.Format("{0:yyyy-MM-dd}", DatePicker1.SelectedDate);
0 голосов
/ 28 февраля 2011

Это происходит потому, что sql ожидает, что дата будет в определенном формате.Попробуйте заменить

dateTimePicker1.Text

на

dateTimePicker1.Text.ToString("dd mmm yyyy");

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...