2010-06-22 64 views
0

我正在研究我正在處理的程序的搜索功能,並且我發現了一個在線教程,提供了一些內容,但是修改後適合我的應用程序後,實際代碼會不行。我現在得到了兩個不同的錯誤,一個告訴我「類型'System.data.sqlclient.sqldatareader'的值不能轉換爲'system.data.sqlclient.sqldatareader的一維數組',另一個說「不爲參數‘陣’的「公共共享功能...反正我是有點新本,並在這裏指定的說法是我到目前爲止所。有什麼建議?Visual basic和SQL中的數據讀取器的問題

Private Sub SearchOKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchOKButton.Click 

Dim TrNum 
    Dim dr As SqlDataReader() 

    TrNum = Me.SearchText.Text() 

    Using connection As New SqlClient.SqlConnection("Data Source=XXXXX;Initial Catalog=YYYYY;Integrated Security=True;Pooling=False;Encrypt=False"), _ 
    cmd As New SqlClient.SqlCommand("SELECT [YYYYY] FROM (TrackingNumber) WHERE TrackingNumber = 'TrNum'", connection) 

     connection.Open() 
     dr = cmd.ExecuteReader() 
     While dr.AsReadOnly() 
      MsgBox("TrackingNumber" + "Date") 
     End While 
     connection.Close() 

    End Using 

End Sub 
+0

嘿Obfus,只是好奇,爲什麼我回答後刪除了你最後一個問題? http://stackoverflow.com/questions/3049221/scanning-fedex-labels-into-a-visual-basic-program – BenV 2010-06-22 19:35:25

+0

@BenV我不好想,我不得不一次回答大聲笑 – 0bfus 2010-06-22 20:51:37

回答

1

這裏有多種問題...

編輯:

我假設TrackingNumber是您正在查詢的表,並且該表包含列TrackingNumberDate

Dim TrNum as String = Me.SearchText.Text ' <== Text is a property, not a function 

Dim connectionString as string = "Data Source=XXXXX;Initial Catalog=YYYYY;Integrated Security=True;Pooling=False;Encrypt=False" 

Dim cmdText as string = "SELECT TrackingNumber, [date] " & _ 
         "FROM TrackingNumber " & _ 
         "WHERE TrackingNumber = @trackingNumber" 

Using connection As New SqlClient.SqlConnection(connectionString) 

    Dim cmd As New SqlClient.SqlCommand(cmdText, connection) 

    ' assign TrNum to @trackingNumber 
    cmd.Parameters.AddWithValue("@trackingNumber", TrNum)  
    connection.Open() 
    dim dr as SqlDataReader = cmd.ExecuteReader() 

    While dr.Read()  ' <== this is probably what you want 
     MsgBox(string.Format("{0} {1}", dr("TrackingNumber"), dr("Date")) 
    End While 

End Using 

Using語法的點是當變量超出範圍時自動關閉連接。

你應該保持連接字符串在web.config

+0

非常感謝!就像我說的,我有點新鮮。這擺脫了直接的錯誤。現在,在dr = cmd.executereader()進行調試的行中存在不正確的語法')'錯誤。有任何想法嗎? – 0bfus 2010-06-22 18:27:02

+0

是因爲我的SQL字符串不正確?我希望它使用TrNum作爲搜索數據庫的值。 – 0bfus 2010-06-22 18:40:50

+0

非常感謝,效果很好!有沒有什麼辦法可以把一個catch在所以如果一個跟蹤號碼被搜索,它不是在數據庫中會說「找不到」或類似的東西? – 0bfus 2010-06-27 20:09:18

0

我不是VB專家,但我做了很多這些類型的連接的內部SCOM我WHILE循環如下所示:

while dr.eof <> true and dr.bof <> true 
    MsgBox(dr("TrackingNumber") + dr("Date")) 
    dr.movenext 
wend 
connection.close 

有多少行是你的SQL語句,返回

+0

@ Kenneth如果有一個條目在數據庫中,它只是兩行代碼,一個是跟蹤編號,另一個是日期,如果它不存在於數據庫中,將不會找到結果。 – 0bfus 2010-06-22 18:08:52

0

你的第一個錯誤信息告訴你,你需要知道:你想創建的DataReader數組時,你不應該:

Dim dr As SqlDataReader() 

它改成這樣:

Dim dr As SqlDataReader 
+0

@ LesterDove謝謝大聲笑我錯過了。 – 0bfus 2010-06-22 18:09:50