2012-03-27 84 views
1

我试图从Visual Basic 2010中的VB.NET连接MySql。我想查询数据库只是为了得到一个返回是我的proID响应,一旦我点击按钮。它成功显示连接已建立,但我似乎无法运行任何SQL查询。什么可能是错的?在vb.net连接到mysql

这是我从即时窗口得到了错误:

A first chance exception of type 'System.InvalidOperationException' occurred in MySql.Data.dll 

让我们假设从按键事件num是1001。

Public Class Form1 
    Private connStr As String = "server=localhost;" & _ 
       "user id=root;Password=1234561;" & _ 
       "database = test" 
    Dim num As Integer 


Private Sub TextBox1_keypress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 
    Dim str As String 
    If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Enter) Then 
     str = TextBox1.Text 
     Dim splitVals As String() = str.Split(" ") 
     num = splitVals(1) 
    End If 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim query As String = "SELECT * FROM products" 
    Dim con As New MySqlConnection(connStr) 
    Dim cmd As New MySqlCommand(query) 
    Try 
     con.Open() 
     MessageBox.Show("Database Connected") 
     cmd.ExecuteNonQuery() 
     cmd.Connection.Close() 

     con.Close() 
    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
End Sub 

End Class 

回答

0

的ExecuteNonQuery用于SQL语句不返回任何数据(例如,INSERT,UPDATE,DELETE)。

你想实现什么?如果你想从product表获取所有记录,并在datagrid显示它,那就试试这个:

Using xConn as New MySqlConnection(connStr) 
    Using xComm as new MySQLCommand() 
     xComm.Connection = xConn 
     xComm.CommandText = "SELECT * FROM products" 
     Using xAdapter as new MySQLDAtaAdapter(xComm) 
      Dim ds as new Dataset 
      xConn.Open() 
      xAdapter.Fill(ds) 
      datagridview1.datasource = ds.tables(0) 
     End Using 
    End Using 
End Using 

更新1

Dim xPrice as Integer = 0 
Using xConn as New MySqlConnection(connStr) 
    Using xComm as new MySQLCommand() 
     xComm.Connection = xConn 
     xComm.CommandText = "SELECT ProductPrice FROM products WHERE proID = @xID" 
      xComm.Parameters.AddWithValue("xID", "Value Here") 
      xConn.Open() 
      xPrice = CInt(xComm.ExecuteScalar()) 
      xConn.Close 
    End Using 
End Using 

Msgbox xPrice 
+0

我只是想从数据库中获得1场。 我得到了proID,并且我想取价格。是否有可能只提取1场? – 2012-03-27 08:11:19

+0

当然:)看到我更新的答案。它使用'ExecuteScalar'。 – 2012-03-27 08:48:02

+0

非常感谢!但如果我期待String而不是Int? – 2012-03-27 10:02:57

1

试试这个代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim query As String = "SELECT * FROM products" 
    Dim con As New MySqlConnection(connStr) 
    Dim da as New MySqlDataAdapter() 
    Dim ds as New DataSet 
    Try 
     con.Open() 
     MessageBox.Show("Database Connected") 
     da=New MySqlDataAdapter(query,con) 
     da.fill(ds,"products") 
     DataGridView1.DataSource=ds.Tables("products") 
     con.Close() 
    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
End Sub