vb.net - DataReader.Read之后如何插入、更新或删除?

标签 vb.net sqldatareader datareader

我有一个项目,当我从DataReader读取数据时需要更新数据库,它说DataReader已经在此连接上打开,必须先关闭。

这是我的代码:

Try

    conn = fOpenConnection()
    cmd = conn.CreateCommand
    queryjadi = "select *..."
    cmd = New MySqlCommand(queryjadi, conn)
    dbReader = cmd.ExecuteReader

    While dbReader.Read
        For Each lvi In lsvBOM.Items
            If dbReader("kode") = lvi.Text.ToString Then
                **'here i want to update my database**
            End If
        Next
    End While

    dbReader.Close()

    queryjadi = "SELECT * ... "

    cmd = New MySqlCommand(queryjadi, conn)
    dbReader = cmd.ExecuteReader

    For Each lvi In lsvBOM.Items
        status = False
        While dbReader.Read
            If dbReader("kode") = lvi.Text Then
                status = True
            End If
        End While
        If status = False Then
            'untuk insert
            **'here i want to insert into database**
        End If
    Next

   MessageBox.Show("Data sudah disimpan", "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)

Catch sqlEx As MySqlException

    fSQLError(sqlEx.Number, sqlEx.Message)

Catch ex As Exception

    MessageBox.Show(ex.Message, "Kesalahan", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)

Finally
    dbReader.Close()
    cmd.Dispose()
    conn.Close()

End Try

我知道当我从 DataReader 读取数据时无法访问数据库,如何修复它?

最佳答案

一般情况下,一个连接只支持一个并发操作;因此,如果您想使用单个连接,一种方法是首先缓冲数据(到某种类型的列表或表格中),然后迭代内存中的列表>,使用连接执行更新。

根据数据库供应商/版本的不同,您也许能够启用“MARS”(多个事件结果集) - 这是一种在同一连接上启用多个命令的技术。例如,在 SQL Server 上,可以通过将连接字符串更改为包含以下内容来激活此功能:

MultipleActiveResultSets=True

第三种选择是使用两个连接;一个用于读取操作,一个用于更新 - 但是,请注意,这可能会遇到连接之间阻塞(也可能死锁)的问题。

但是,第四个也是最优选的选项是:不要仅仅为了进行更新而通过网络提取数据。如果可能,请在 SQL 中编写基于批处理的操作,无需离开数据库即可直接执行更改,然后只需执行该 SQL 脚本即可。

关于vb.net - DataReader.Read之后如何插入、更新或删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504407/

相关文章:

c# - 对于条件 VB.NET 与 C#

.net - 列表(列表(对象))中的组合

c# - 无法将方法组 'Read' 转换为非委托(delegate)类型 'bool'

c# - 用 SQL 语句的结果填充任何 ArrayList

c# - 读取百万记录数据的最佳性能

python - 使用 pandas datareader 拉取股票信息

python - 如何访问 Pandas 的 DataReader 中的日期行?

vb.net - 如何使用vb.net获取一年中的总小时数?

VB.NET 没有日期时间?数据读取器

mysql - 制作PM系统的收件箱-动态链接面板控件