2014-10-23 4 views
0

Я некоторое время задерживался на этой ошибке, в vb.net пытался подключиться к SQL и вытащить данные из таблицы в течение дня, используя параметры для этого, datetimepicker - данные, сохраненные для SQL в пользовательском формате datetime dd/MM/yyyy HH: mm: ss,Must declae Скалярная переменная

Когда я выполняю свой код, я получаю «Должен объявить скалярную переменную @startdata». Когда я удаляю код «и startdate> = @startdata И STARTDATE < @enddata "он работает, но показывает все данные без диапазона дат, как это должно быть.

connect() 
    cmd.Parameters.Clear() 
    cmd.CommandText = "SELECT status, startdate, seconds FROM [sqlccmlinestatus] WHERE line = '" & ComboBox1.Text & "' and startdate >= @startdata AND startdate < @enddata " 
    cmd.Parameters.AddWithValue("@startdata", DateTimePicker1.Value) 
    cmd.Parameters.AddWithValue("@enddata", DateTimePicker1.Value.AddDays(1)) 
    cmd.ExecuteScalar() 
    Dim dataAdapter = New SqlDataAdapter(cmd.CommandText, con.ConnectionString) 
    Dim table As New DataTable() 

    table.Locale = System.Globalization.CultureInfo.InvariantCulture 
    dataAdapter.Fill(table) 
    Me.BindingSource1.DataSource = table 

    DataGridView1.DataSource = BindingSource1 

    disconnect() 

    DataGridView1.RowHeadersWidth = "28" 

    DataGridView1.Columns(0).Width = 78 
    DataGridView1.Columns(1).Width = 78 
    DataGridView1.Columns(2).Width = 95 

    DataGridView1.Columns(0).HeaderText = "Status:" 
    DataGridView1.Columns(1).HeaderText = "Date:" 
    DataGridView1.Columns(2).HeaderText = "Seconds:" 

    DataGridView1.EnableHeadersVisualStyles = False 
    DataGridView1.Rows(0).Selected = True 

Любая помощь будет большим,

Большое спасибо, Пит

+0

Разве вы не используете 'MySqlDataAdapter' вместо' SqlDataAdapter'? Использует ли поставщик данных поддержку названных параметров? –

ответ

0

Во-первых избежать line = '" & ComboBox1.Text & "'. Вместо этого добавьте новый параметр (это предложение, это не является причиной вашей ошибки).

Второй добавить Date часть стоимости DatePicker

cmd.CommandText = "SELECT status, startdate, seconds FROM [sqlccmlinestatus] WHERE [line] = @line and startdate >= @startdata AND startdate < @enddata " 
cmd.Parameters.AddWithValue("@startdata", DateTimePicker1.Value.Date) 
cmd.Parameters.AddWithValue("@line", ComboBox1.Text) 
cmd.Parameters.AddWithValue("@enddata", DateTimePicker1.Value.Date.AddDays(1)) 

это работает, если вы хотите проверить только DATEPART.

Лучший способ сделать это было бы объявить тип параметра и присвоить значение

cmd.Parameters.Add("@startdata",SqlDbType.DateTime).Value=DateTimePicker1.Value; 

если параметр line не работает, попробуйте с SelectedText свойством комбобоксе

вместо Text Недвижимость.

+0

Спасибо за изменения, я изменил для строки, а также параметры для startdata, я сделал то же самое для enddata, но теперь коды не работают в «Должен объявить строку« скалярная переменная ».» Cheers –

+0

попробуйте 'cmd.Parameters.Add (" @ line ", SqlDbType.VarChar, 30) .Value = ComboBox1.Text;' – faby

+0

Просто попробовал, не повезло, все еще есть проблема «Должен объявить скалярную переменную», - Спасибо –