2015-02-10 50 views
1

沒有值給出我有一個VB窗體下面的代碼一個或多個必需的參數vb.net

Dim dt As New DataTable 
    Dim query As String = " select [incident id] as incidentid, ([incident ID] &' '&[incident date]) as incisearch from incident where [stock supplier] =hengwei" 
    Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Kevin\Desktop\Non Conformance\NonConformance.accdb") 
     Using command As New OleDbCommand(query, connection) 
      Using adapter As New OleDbDataAdapter(command) 
       connection.Open() 
       adapter.Fill(dt) 
       connection.Close() 
      End Using 
     End Using 
    End Using 

    If dt.Rows.Count > 0 Then 
     lb_search.DataSource = dt 
     lb_search.DisplayMember = "incisearch" 
     lb_search.ValueMember = "incidentid" 
    End If 

我所採取的查詢字符串

select [incident id] as incidentid, ([incident ID] &' '&[incident date]) as incisearch 
from incident 
where [stock supplier] = hengwei 

,並直接跑到這是一個在Access查詢返回結果如預期,所以我知道SQL是正確的

但我收到以下錯誤信息

對於一個或多個所需參數沒有給出值。

及以下線路被高亮顯示

adapter.Fill(dt) 

任何想法是什麼引起的?

回答

1

我想hengwey應該'hengwey'

SELECT [incident id]       AS incidentid, 
     [incident id] + ' ' + [incident date] AS incisearch 
FROM incident 
WHERE [stock supplier] = 'hengwei' 

我也改變了

([incident ID] &' '&[incident date]) 

[incident id] + ' ' + [incident date] 

,因爲SQL是不是VB.NET(但也許在工作訪問)。

如果hengwey實際上是動態的,你應該使用SQL參數,以防止SQL注入:

Dim query As String = "SELECT [incident id] AS incidentid, [incident id] + ' ' + [incident date] AS incisearch FROM incident WHERE [stock supplier] = @hengwei " 
' ... ' 
Dim p As New OleDbParameter("@hengwei", OleDbType.VarChar, 100) 
p.Value = txt_supplier.text 
command.Parameters.Add(p) 
' ... ' 
+0

這工作感謝,不能相信這件事很簡單。但是,現在我知道這是工作,我試圖用&txt_supplier.text替換'hengwei',這是表單上的文本框,現在顯示爲「&txt_supplier.text&」,並返回錯誤消息。我必須使用「而不是」連接到一個表單控件。任何想法? – Boneyt 2015-02-10 11:36:51

+1

@Boneyt:我編輯了我的答案。 – 2015-02-10 11:45:40

+0

蒂姆謝謝你這麼多的編輯答案 – Boneyt 2015-02-10 12:11:37

0

你應該寫雙引號之間的字符串,否則訪問認爲這是一個參數化查詢。而在你的情況應該改變

where [stock supplier] =hengwei 

where [stock supplier] = "hengwei" 

如果你想使用恆威作爲參數不是一個常數,你應該參數添加到您的數據適配器,這樣

adapter.Parameters.Add("@CompanyName", SqlDbType.NChar, 15, "CompanyName") 

欲瞭解更多信息,你可以使用這link

+0

謝謝,使用恆威只是一個,因爲我是使用它來查看保證的結果,我通常會將它鏈接到一個文本框,它是txt_supplier.text,但現在錯誤返回 – Boneyt 2015-02-10 11:43:43

+0

您應該使用參數,在鏈接中解釋。 – fofik 2015-02-10 11:49:59

相關問題