Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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
Vb.net 对象引用未设置为对象的实例(VS 2010-VB)_Vb.net - Fatal编程技术网

Vb.net 对象引用未设置为对象的实例(VS 2010-VB)

Vb.net 对象引用未设置为对象的实例(VS 2010-VB),vb.net,Vb.net,这是我的代码: Imports MySql.Data.MySqlClient Public Class ChartOfAccounts Public dbCon As New MySqlConnection Public strQuery As String Public dbCmd As MySqlCommand Public DR As MySqlDataReader Public dbAda As MySqlDataAdapter Public dbTable As DataTable

这是我的代码:

Imports MySql.Data.MySqlClient

Public Class ChartOfAccounts

Public dbCon As New MySqlConnection
Public strQuery As String
Public dbCmd As MySqlCommand
Public DR As MySqlDataReader
Public dbAda As MySqlDataAdapter
Public dbTable As DataTable
Public DS As DataSet

Private Sub updateTable()
    strQuery = "SELECT * FROM account_chart"
    Try
        dbAda = New MySqlDataAdapter(strQuery, dbCon)
        dbTable = New DataTable
        DataGridView1.AutoGenerateColumns = False
        dbAda.Fill(dbTable)
        DataGridView1.DataSource = dbTable
    Catch ex As Exception
        MsgBox("MySQL Connection Error:" & ex.Message, MsgBoxStyle.Critical, "Connection Error")
    End Try
End Sub

Private Sub btncoa_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncoa_save.Click
Dim AcctName As String
Dim AcctType As String
Dim AcctNormalSide As String
Dim AcctDescription As String
Dim rowCount As Integer
AcctName = txtcoa_name.Text
AcctType = cmbcoa_type.SelectedItem
AcctNormalSide = cmbcoa_normal.SelectedItem
AcctDescription = txtcoa_desc.Text
strQuery = "SELECT COUNT(*) FROM account_chart WHERE coa_name='" & AcctName & "'"
Try
    dbCmd = New MySqlCommand(strQuery, dbCon)
    rowCount = Convert.ToInt32(dbCmd.ExecuteScalar())
    If rowCount <> 0 Then
        MsgBox("Account name already exists!", MsgBoxStyle.Critical, "Procedure Error")
    Else
        strQuery = "INSERT INTO account_chart(coa_name, coa_type, coa_normal, coa_desc) VALUES('" & AcctName & "','" & AcctType & "','" & _
            AcctNormalSide & "','" & AcctDescription & "')"
        Try
            dbCmd = New MySqlCommand(strQuery, dbCon)
            DR = dbCmd.ExecuteReader()
            DR.Read()
            DR.Close()
        Catch ex As Exception
            MsgBox("MySQL Procedure Error:" & ex.Message, MsgBoxStyle.Critical, Procedure Error")
            DR.Close()
        End Try
        MsgBox("Information added successfully!", MsgBoxStyle.Information, "Saving to Database")
    End If
    DR.Close()
Catch ex As Exception
    MsgBox("MySQL Procedure Error:" & ex.Message, MsgBoxStyle.Critical, "Procedure Error") 'error message: object reference not set to an instance...
End Try
updateTable()
End Sub
End Class
导入MySql.Data.MySqlClient
公共类会计科目表
公共dbCon作为新的MySqlConnection
作为字符串的公共strQuery
公共dbCmd作为MySqlCommand
公共DR作为MySqlDataReader
作为MySqlDataAdapter的公共dbAda
公共dbTable作为DataTable
公共DS作为数据集
私有子更新表()
strQuery=“从科目表中选择*
尝试
dbAda=新的MySqlDataAdapter(strQuery,dbCon)
dbTable=新数据表
DataGridView1.AutoGenerateColumns=False
dbAda.Fill(dbTable)
DataGridView1.DataSource=dbTable
特例
MsgBox(“MySQL连接错误:&例如消息,MsgBoxStyle.Critical,“连接错误”)
结束尝试
端接头
私有子btncoa_save_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)处理btncoa_save.Click
作为字符串的Dim AcctName
Dim AcctType As字符串
Dim AcctNormalSide作为字符串
Dim ACCT描述为字符串
将行计数设置为整数
AcctName=txtcoa_name.Text
AcctType=cmbcoa\U类型。选择编辑项
AcctNormalSide=cmbcoa\u normal.SelectedItem
AcctDescription=txtcoa\u desc.Text
strQuery=“从科目表中选择COUNT(*),其中coa\u name=”&AcctName&“
尝试
dbCmd=newmysqlcommand(strQuery,dbCon)
rowCount=Convert.ToInt32(dbCmd.ExecuteScalar())
如果行数为0,则
MsgBox(“帐户名已存在!”,MsgBoxStyle.Critical,“过程错误”)
其他的
strQuery=“插入科目表(科目名称、科目类型、科目正常值、科目描述)值(‘“&AcctName&’,‘“&AcctType&’,‘,‘,’”_
AcctNormalSide&“,”&AcctDescription&“)”
尝试
dbCmd=newmysqlcommand(strQuery,dbCon)
DR=dbCmd.ExecuteReader()
里德博士()
克洛斯博士()
特例
MsgBox(“MySQL过程错误:&例如消息,MsgBoxStyle.Critical,过程错误”)
克洛斯博士()
结束尝试
MsgBox(“信息添加成功!”,MsgBoxStyle.Information,“保存到数据库”)
如果结束
克洛斯博士()
特例
MsgBox(“MySQL过程错误:”&ex.Message,MsgBoxStyle.Critical,“过程错误”)'错误消息:对象引用未设置为实例。。。
结束尝试
updateTable()
端接头
末级

每当我输入Else语句时,我就会收到一条“Object reference not set to instance of a Object”(对象引用未设置为对象实例)错误消息(我是通过实验messagebox消息发现的,这样我就可以看到错误消息何时出现的,当我添加一个尚不存在的帐户名时,它就会出现).Data已添加到数据库,但它显示的是另一个MsgBox(显示此错误消息的MsgBox)。我希望将其删除,以便在向数据库添加数据时,它只显示消息框“已成功添加”“没有错误消息。为什么会发生此错误?

您可能希望使用调试器来确定引发异常的行。strQuery声明在哪里?此外,您应该学会使用参数化查询,而不是使用字符串连接,以避免潜在的SQL注入攻击。@很抱歉,我忘了添加。在public类Form1之后,它与其他MySql连接声明一起声明为public。我还有Imports.MySql.Data.MySqlClient。另外,在执行插入时不应使用
ExecuteReader
。您应该调用
ExecuteNonQuery