mysql到vb.net命令

mysql到vb.net命令,mysql,vb.net,Mysql,Vb.net,请帮我查一下这个密码 当我运行这段代码时,我发现一个错误“读卡器关闭时读取的尝试无效” q=“从测试表1中选择* com=新的MySqlCommand(q,con) rs=com.ExecuteReader 而R.阅读 Dim ln=rs.GetInt64(“id1”) Dim fn=rs.GetString(“名称”) 如果fn=TextBox1.Text,则 rs.Close() f1=“插入test.table2(id2,fname,MNName,name)值(“&”null“&“,”&T

请帮我查一下这个密码 当我运行这段代码时,我发现一个错误“读卡器关闭时读取的尝试无效”

q=“从测试表1中选择*
com=新的MySqlCommand(q,con)
rs=com.ExecuteReader
而R.阅读
Dim ln=rs.GetInt64(“id1”)
Dim fn=rs.GetString(“名称”)
如果fn=TextBox1.Text,则
rs.Close()
f1=“插入test.table2(id2,fname,MNName,name)值(“&”null“&“,”&TextBox2.Text&“,”&TextBox3.Text&“,”&Val(ln)&“)”
com=新的MySqlCommand(f1,con)
com.ExecuteNonQuery()
如果结束
结束时
con.Close()
rs.Dispose()
MsgBox(“成功插入数据”)

如果您输入If块,您将关闭
MySqlDataReader
,因为您需要运行insert命令,但当连接忙时,无法使用DataReader为另一个命令服务。但是,代码将继续并执行下一个循环。此时,如果尝试使用前一个变量读取,则会出现错误,因为MySqlReader在前一个循环中已关闭

您可以使用第一个连接中的connectionstring来修复打开第二个连接的问题。这似乎是MySql.NET适配器所需的路径,因为它不支持连接字符串(如SqlServer)中的
MultipleActiveResultSets
关键字

While rs.Read

    Dim ln = rs.GetInt64("id1")
    Dim fn = rs.GetString("name")

    If fn = TextBox1.Text Then
        f1 = "INSERT INTO ........"
        Using con2 = new MySqlConnection(con.ConnectionString)
            con2.Open()
            com = New MySqlCommand(f1, con2)
            com.ExecuteNonQuery()
        End Using
    End If

End While

第一次在if块内输入后会发生什么情况?第一次查询运行,但当我在表中插入数据时,我遇到了问题,rs=mydatareader应该关闭,以便第二次执行。因此,我有两个表table1,由id1、name、age和第二个表名组成table2有id2、fname、MNName,id1,其中table1.id1应该等于table2.id1,其中它有关系当我尝试你的例子时,我发生了错误连接必须是有效的打开,我还声明con2为MySQLConnectionies,忘记了它,现在添加无需显式声明。它是从新的MySqlConnection自动推断出来的。它只在if中使用,并在最后使用语句关闭和释放。作为本文的一部分,我建议您研究参数化查询和Sql注入。在你最喜欢的搜索引擎上搜索,你会发现改进插入查询的有趣提示。
While rs.Read

    Dim ln = rs.GetInt64("id1")
    Dim fn = rs.GetString("name")

    If fn = TextBox1.Text Then
        f1 = "INSERT INTO ........"
        Using con2 = new MySqlConnection(con.ConnectionString)
            con2.Open()
            com = New MySqlCommand(f1, con2)
            com.ExecuteNonQuery()
        End Using
    End If

End While