Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未处理InvalidOperationException-数据网格视图问题_C#_Mysql_Vb.net_Datagridview_Xampp - Fatal编程技术网

C# 未处理InvalidOperationException-数据网格视图问题

C# 未处理InvalidOperationException-数据网格视图问题,c#,mysql,vb.net,datagridview,xampp,C#,Mysql,Vb.net,Datagridview,Xampp,错误:commandtext属性未正确初始化 我已经在我的一个表单中创建了一个数据网格视图,我正试图使用它来显示来自xampp的数据库详细信息。虽然当我尝试打开表单时,我会发现上面的错误,它会将我引导到本节的过程和变量模块: 'Procedure which executes any SQL query. Public Sub SQL_executer() Call connection_checker() objdataadapter.SelectCommand = N

错误:commandtext属性未正确初始化

我已经在我的一个表单中创建了一个数据网格视图,我正试图使用它来显示来自xampp的数据库详细信息。虽然当我尝试打开表单时,我会发现上面的错误,它会将我引导到本节的过程和变量模块:

   'Procedure which executes any SQL query.
Public Sub SQL_executer()
    Call connection_checker()

    objdataadapter.SelectCommand = New MySqlCommand()
    objdataadapter.SelectCommand.Connection = objconnection
    objdataadapter.SelectCommand.CommandText = sqlstring

    objcommandbuilder = New MySqlCommandBuilder(objdataadapter)
    objdataadapter.Fill(objdataset) ----------- THIS SECTION GIVES ERROR
    objdataadapter.SelectCommand.CommandType = CommandType.Text

End Sub

'Procedure used to load data from the database for the selected table.
Public Sub initial_load()
    Call connection_checker()
    Call SQL_executer()

    objdataset = New DataSet
    objdataadapter.Fill(objdataset, tablename)
    objconnection.Close()

End Sub
这是具有数据网格视图的表单中的相关代码:

Imports MySql.Data
导入MySql.Data.MySqlClient 导入系统。绘图。打印 导入系统 导入System.Windows.Forms

公共类frmClientDetails Dim form_type As form Dim user_表作为字符串 Dim objconnection作为新的MySqlConnection(“服务器=本地主机;数据库=ba解决方案;用户id=根;密码=”) 将sqlstring设置为字符串

Private Sub frmClientDetails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    sqlstring = "SELECT * FROM `BA-Solutions`"
    tablename = "`Client_Details`"

    Call initial_load()
    Call bind_dataset_DGVClient()
    Call count_records()
    rowposition = 0

    DGVClient.DataSource = objdataset
    DGVClient.DataMember = tablename
End Sub
这是我的整个过程和变量模块,仅供参考

Imports MySql.Data
导入MySql.Data.MySqlClient

模块程序和变量

Public objconnection As New MySqlConnection("Server=localhost;database=ba-solutions;user id=root;password=")

Public objdataadapter As New MySqlDataAdapter
Public objdataset As New DataSet
Public objcommandbuilder As New MySqlCommandBuilder
Public objdatatable As New DataTable
Public rowposition As Integer = 0
Public sqlstring As String
Public tablename As String
Public objcommand As MySqlCommand
Public reader As MySqlDataReader
Public database_path As String = "Server=localhost;database=ba-solutions;user id=root;password="
Public path As String
Public backup As New MySqlBackup

'Procedure which checks whether or not the current connection is open and opens it, if it is closed.
Public Sub connection_checker()
    If objconnection.State = ConnectionState.Closed Then
        Try
            objconnection.Open()
        Catch ex As MySqlException
            MsgBox("Error connecting to database")
        End Try
    End If
End Sub

'Procedure which executes any SQL query.
Public Sub SQL_executer()
    Call connection_checker()

    objdataadapter.SelectCommand = New MySqlCommand()
    objdataadapter.SelectCommand.Connection = objconnection
    objdataadapter.SelectCommand.CommandText = sqlstring

    objcommandbuilder = New MySqlCommandBuilder(objdataadapter)
    objdataadapter.Fill(objdataset)
    objdataadapter.SelectCommand.CommandType = CommandType.Text

End Sub

'Procedure used to load data from the database for the selected table.
Public Sub initial_load()
    Call connection_checker()
    Call SQL_executer()

    objdataset = New DataSet
    objdataadapter.Fill(objdataset, tablename)
    objconnection.Close()

End Sub

'Procedure used to update data in a table with the changes made to the data in the datagrid.
Public Sub update_data()
    Call connection_checker()
    Try
        objdataadapter.Update(objdataset, tablename)
        MsgBox("Changes accepted", MsgBoxStyle.Information, "Update successfull")
    Catch ex As Exception
        MsgBox("Changes declined", MsgBoxStyle.Critical, "Update unsuccessfull")
    End Try
End Sub

'Procedures used to bind the relevant data to the data grid, with the correct header titles.
Public Sub bind_dataset_DGVClient()
    frmClientDetails.DGVClient.AutoGenerateColumns = True
    frmClientDetails.DGVClient.DataSource = objdataset
    frmClientDetails.DGVClient.DataMember = tablename

    frmClientDetails.DGVClient.Columns(0).HeaderText = "Company Name"
    frmClientDetails.DGVClient.Columns(1).HeaderText = "Company Type"
    frmClientDetails.DGVClient.Columns(2).HeaderText = "VAT Registration Number"
    frmClientDetails.DGVClient.Columns(3).HeaderText = "PAYE and Tax Reference"
    frmClientDetails.DGVClient.Columns(4).HeaderText = "Address Line 1"
    frmClientDetails.DGVClient.Columns(5).HeaderText = "City"
    frmClientDetails.DGVClient.Columns(6).HeaderText = "Postcode"
    frmClientDetails.DGVClient.Columns(7).HeaderText = "Email"
    frmClientDetails.DGVClient.Columns(8).HeaderText = "Phone Number"






    'NEEDS TO BE COMPLETED FOR ALL DATASETS
End Sub
端模块


我是vb/sql新手,花了几个小时来解决这个问题,但毫无效果,我相信这很简单,但我也不是一个基本的专家。谢谢您的帮助。

错误告诉您尚未设置objdataadapter.SelectCommand.CommandText。在调用Fill方法之前,需要设置CommandText和CommandType

objdataadapter.SelectCommand.CommandType = CommandType.Text
objdataadapter.SelectCommand.CommandText = "Select statement goes here"
objdataadapter.Fill(objdataset)

在DB上不使用Select,而是在表上使用它。您可以通过将变量设置为diff tables names使其更通用,并且该sql字符串将加载任何要告诉它的表

Public Function ReloadNewTable(tablename As String) As DataTable
  Dim sqlstring = String.Format("SELECT * FROM {0}", tablename)
  'fill a datatable with new query and return the datatable.

您的
连接字符串
告诉它要使用什么数据库。也不要将表名用'char'括起来。然后用这个已更正的sql字符串设置CommandText。

我仍然会遇到同样的错误,请原谅我的无知,但是我把所有内容都放在哪里了,我很困惑。我不想将select语句放在“过程和变量”模块中,因为我将对不同的表再次使用select语句。@Livare,我更新了示例,以便您可以使用变量更改表名。我将所有内容放在什么位置,因为我不能在数据库上使用Select语句,如果我在模块中的一个表上使用它,那么它将继续调用同一个表?它将进入SQL_executer。您是否试图构建一个通用方法来执行所有execute语句?我建议不要这样做,设置命令对象并填充它并不需要太多的工作。我认为第一个问题已经解决了,但现在在我的模块中的这一行:frmClientDetails.DGVClient.DataMember=tablename我得到错误:参数异常未处理……无法创建字段Client_详细信息的子列表。