2015-02-24 185 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

相关问题