2016-01-12 12 views
2

Я использую следующий SQL заявление:Должен объявить скалярную переменную "@ ??????"

 Dim strSql5 As String = "SELECT * FROM dbo.ontledings " & _ 
           " where plaasblok = @plaasblokparsversoeke " & _ 
           " and analisedatum = @laastedatum" 


    cnn.Open() 
    Dim aksie2 As New SqlClient.SqlCommand(strSql5, cnn) 
    aksie2.Parameters.Add("@plaasblokparsversoeke", SqlDbType.VarChar).Value = plaasblokparsversoeke 
    aksie2.Parameters.Add("@laastedatum", SqlDbType.Date).Value = laastedatum 
    aksie2.ExecuteNonQuery() 
    cnn.Close() 

Я хочу, чтобы заполнить DataTable, как так:

Dim dtb5 As New DataTable 
    dtb5.Clear() 

    Using cnn As New SqlConnection("Data Source=GIDEON-E-LAPTOP\SQLEXPRESS2014;Initial Catalog=SkeduleringDatabasis;Integrated Security=True") 
     cnn.Open() 

     Using dad5 As New SqlDataAdapter(strSql5, cnn) 

      dad5.Fill(dtb5) 
     End Using 
     cnn.Close() 
    End Using 

Я получаю следующее сообщение об ошибке: Необходимо объявить скалярную переменную «@plaasblokparsversoeke»

Я не могу понять, где и как объявить скалярные переменные.

Ошибка возникает в строке: dad5.Fill (dtb5)

С уважением

ответ

5

Вы должны добавить параметры, такие как

cmd.Parameters.Clear() 
cmd.Parameters.AddWithValue("@plaasblokparsversoeke", plaasblokparsversoeke.Text) 
cmd.Parameters.AddWithValue("@laastedatum", laastedatum.Text) 

Как правильно комментировал ниже, вы должны использовать Add method добавить paramters:

cmd.Parameters.Add("@plaasblokparsversoeke", SqlDbType.Varchar).Value = plaasblokparsversoekeVariable; 
cmd.Parameters.Add("@laastedatum", SqlDbType.Varchar).Value = laastedatumVariable; 
+0

[Можем ли мы прекратить использование AddWithValue?] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) –

+1

@AlexB.: - Спасибо, что указали это. Обновлен мой ответ! –

+0

Спасибо Рахул, Приношу свои извинения. Я обновил свой вопрос, в котором я добавил параметры в команду sql. – Gideon

1

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

Чтобы ответить на ваш конкретный вопрос: вы пытаетесь использовать параметры в запросе, не указав их в SQLCommand.

Для получения полной документации см. MSDN.

+0

Спасибо, Видор, я отредактировал мой вопрос. – Gideon

1

С помощью этого запроса

Dim strSql5 As String = "SELECT * FROM dbo.ontledings " & _ 
          " where plaasblok = @plaasblokparsversoeke " & _ 
          " and analisedatum = @laastedatum" 

Вы definining 2 переменных SQL называемых @plaasblokparsversoeke и @laastedatum, которые вы должны передать в качестве параметров вашей команды, как этого

command.Parameters.Add("@plaasblokparsversoeke", SqlDbType.Int); 
command.Parameters["@plaasblokparsversoeke "].Value = yourValue; 

статья MSDN по SQL Параметры команды here

+0

Просто из интереса, есть ли причина добавить параметр, а затем установить его значение в отдельной строке, а не с помощью AddWithValue? Или ты просто сделал это таким образом, чтобы сделать его максимально ясным для Рахула? –

+0

'AddWithValue' имеет несколько [выпусков] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) и больше не нужно использовать. –

+0

Спасибо, nano, я отредактировал мой вопрос. – Gideon

Смежные вопросы