2015-02-24 172 views
0

我的代碼在數據庫中搜索與列表視圖的選定項目相同的值,例如:「01」代碼在數據庫中搜索「01」,現在01在數據庫中相當於一個名稱,例如01 = Name,我的問題是; 如果代碼創立01我想要得到的名稱,而不是01如何從mysql數據庫中獲取特定數據vb.net

我的代碼的

 Try 
     Call DatabaseConnection() 
     MySqlConn.Open() 
     For Each item As ListViewItem In ListViewAttendance.SelectedItems 
      Query = "select * from dtr_database.dtr_entries where dtr_entry_number= '" & item.SubItems(0).Text & "'" 
      Command = New MySqlCommand(Query, MySqlConn) 
      Reader = Command.ExecuteReader 
      Dim Count As Integer 
      Count = 0 
      While Reader.Read 
       Count = Count + 1 
      End While 
      If Count = 1 Then 

       'if 01 is found Get Name of 01. How to do this? 

       MessageBox.Show("Record Found") 
      ElseIf Count > 1 Then 
       MessageBox.Show("Multiple Records Found") 
      Else 
       MessageBox.Show("Record Found2") 
      End If 
     Next 
     MySqlConn.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 

回答

1

雖然你的代碼有許多問題,直接回答你的問題是,你應該叫Reader.GetString(ColumnNumber)While循環獲取Name列的值。

不過,也有可以改進的幾件事情:

  1. 首先和最重要的,你不應該直接通過連接除了最普通的應用程序的字符串執行查詢。這可能導致各種麻煩,例如其中最不重要的是SQL Injection
  2. 請勿在查詢中使用SELECT *。這將在您的表格的所有列中引入當前場景中是否需要它們。此外,您不確定列的順序。而是在你的查詢中指定你需要的列名。
  3. 如果可能,請轉到ADO.NET DataSet或EF。他們可以爲您的查詢創建易於使用的DataAdapter和包裝方法,這些方法與標準vb.net函數一樣工作。另外他們使用命令參數來保護你免受SQL注入的可能性。
  4. 如果您傾向於在代碼中直接使用SqlCommand,那麼如果您只需獲取單個列(您的案例中的名稱列),請嘗試使用ExecuteScalar()。這將使您無需運行Read()循環。
+0

我從adodb開始,一直到困難的,我必須做更多關於你的建議的研究,所以我可以適應更好,更有效的方式,歡呼! – 2015-02-24 05:26:03

相關問題