2016-01-12 185 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() 

我想填補像這樣一個數據表:

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添加參數:

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-alrea dy /) –

+1

@AlexB。: - 謝謝指出。更新了我的答案! –

+0

謝謝Rahul,我的歉意。我更新了我在其中添加參數到sql命令的問題。 – Gideon

1

Firstl y,避免以這種方式對參數化查詢進行硬編碼,以避免SQL注入。

要回答您的具體問題:您正試圖在查詢中使用參數,而無需在SQLCommand中定義它們。

查看MSDN的完整文檔。

+0

謝謝維多爾,我編輯了我的問題。 – Gideon

1

與此查詢

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

您definining 2個稱爲@plaasblokparsversoeke和@laastedatum SQL變量,你必須作爲參數傳遞給你的命令,這

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

在SQL MSDN文章像命令參數here

+0

出於興趣,是否有理由添加該參數,然後將其值設置爲單獨的行而不是使用AddWithValue?或者你是否按照這種方式完成了Rahul的工作? –

+0

'AddWithValue'有幾個[問題](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/),不應再使用。 –

+0

感謝nano,我編輯了我的問題。 – Gideon