Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/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
Asp.net 第二个ExecuteReader()不';行不通_Asp.net_Mysql_Vb.net - Fatal编程技术网

Asp.net 第二个ExecuteReader()不';行不通

Asp.net 第二个ExecuteReader()不';行不通,asp.net,mysql,vb.net,Asp.net,Mysql,Vb.net,我有一个检查用户有效性的代码,如果用户有效,它会在数据库中插入某些值 我的问题是,当我查询数据库以检查某个用户是否有效,然后尝试将附加值传递给其帐户时,当我第二次调用ExecuteReader()时,流停止 没有错误,或者类似的事情。我试图用ExecuteOneQuery替换ExecuteReader(),但仍然不起作用。我在mysql命令提示符下尝试了所有的查询,它们工作得非常好。我真的不明白我在那里做错了什么。有人能帮我吗 代码如下: Try myconn.Open

我有一个检查用户有效性的代码,如果用户有效,它会在数据库中插入某些值

我的问题是,当我查询数据库以检查某个用户是否有效,然后尝试将附加值传递给其帐户时,当我第二次调用ExecuteReader()时,流停止

没有错误,或者类似的事情。我试图用ExecuteOneQuery替换ExecuteReader(),但仍然不起作用。我在mysql命令提示符下尝试了所有的查询,它们工作得非常好。我真的不明白我在那里做错了什么。有人能帮我吗

代码如下:

 Try
            myconn.Open()
            Dim stquery As String = "SELECT * from accountstbl WHERE SE_ID = " & Id.Text
            Dim smd = New MySqlCommand(stquery, myconn)
            Dim myreader = smd.ExecuteReader()
            If Not myreader.HasRows Then
                errorUser.Visible = True

            Else
                myreader.Read()
                Dim name As String = myreader.Item("user_name").ToString()

                Dim stquery2 = "INSERT into backup VALUES (" & name & ", '" & Info & "')"
                Dim smd2 = New MySqlCommand(stquery2, myconn)
                Dim Myreader2 As MySqlDataReader
                'smd.ExecuteNonQuery()'
                'THE CODE STOPS HERE'
                Myreader2 = smd2.ExecuteReader()
                'Myreader2.Read()'

                MsgBox("The BACKUP INFORMATION HAS BEEN SAVED")


            End If
            myconn.Close()
        Catch ex As Exception
            Dim ErrorMessage As String = "alert('" & ex.Message.ToString() & "');"
            Page.ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", ErrorMessage, True)
            myconn.Close()
        End Try

如果要执行嵌套的
读取器
,则必须创建另一个
连接
。你需要像这样的东西

smd2 = New MySqlCommand(stquery2, myconn2)' myconn2 is another connection

在连接字符串中设置“
MultipleActiveResultSets=True

另外,使用
ExecuteNonQuery()
插入

Dim name As String = myreader("user_name").ToString()
Dim stquery2 = "INSERT into backup VALUES ('" & name & "', '" & Info & "')"
Dim smd2 = New MySqlCommand(stquery2, myconn)
smd.ExecuteNonQuery()

请使用

逻辑是,在执行另一个读卡器(MyReader2)之前,您需要关闭第一个读卡器(myreader)在同一连接上。

因为第二个查询是更新而不是选择,所以需要使用
ExecuteNonQuery
方法执行它。注释掉的代码显示试图调用
ExecuteNonQuery
,但使用了错误的命令对象(
smd
,当它应该是
smd2
)。请尝试以下方法:

myreader.Read()
Dim name As String = myreader.Item("user_name").ToString()

Dim stquery2 = "INSERT into backup VALUES (" & name & ", '" & Info & "')"
Dim smd2 = New MySqlCommand(stquery2, myconn)
smd2.ExecuteNonQuery()
ExecuteNonQuery
方法返回更新为
int
值的行数,因此如果它对您有价值,您可以捕获它。在您的情况下,它可能不是,但下面是您检查的方式:

int rowsAdded = smd2.ExecuteNonQuery();
if (rowsAdded == 1) {
   // expected this
} else {
   // didn't expect this
}

最后,连接字符串以生成SQL命令可能会使您容易受到SQL注入攻击。请看一下使用参数化查询。这是一个不错的示例。

ok。但在这种情况下,我会提示一个错误。但不会发生。请稍候,我将尝试关闭现有的一个。@nelsonb您是正确的,但请给出一个答案如果你对代码感兴趣,我会很感激的。这让我很困惑。当我按下按钮时,我根本不明白代码出了什么问题,什么都没有改变。我试图创建第二个连接(因为如果我添加MultipleActiveResultSets=True,它会说关键字不受支持)并且还关闭了以前的datareader。但是问题仍然是创建另一个连接,您的第二个查询是插入,不需要
ExecuteReader()
我尝试在每一行代码后逐个添加MsgBoxe,以跟踪执行停止的位置,最后显示消息的位置是我在
Dim Myreader2之后作为MySqlDataReader插入消息时