Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Visual Studio Vb.net从oracle查询加载的数据集缺少或替换第一行数据_Vb.net_Oracle_Datatable - Fatal编程技术网

Visual Studio Vb.net从oracle查询加载的数据集缺少或替换第一行数据

Visual Studio Vb.net从oracle查询加载的数据集缺少或替换第一行数据,vb.net,oracle,datatable,Vb.net,Oracle,Datatable,我有一个vb.net应用程序,可以查询oracle/labdaq数据库并将数据集加载到datatable中。出于某种原因,查询工作正常,没有引发异常,但是,当我加载数据时,它似乎缺少第一行。我第一次注意到这个问题是在我对一行进行查询时,当我在调试期间检查datatable的行数时,它返回了零行。然后,我将所有数据集与直接来自oracle源代码的data miner应用程序进行了比较,在使用该应用程序时,我似乎总是缺少第一行数据 这是代码。。。我将查询字符串更改为其他内容以维护公司隐私 Priv

我有一个vb.net应用程序,可以查询oracle/labdaq数据库并将数据集加载到datatable中。出于某种原因,查询工作正常,没有引发异常,但是,当我加载数据时,它似乎缺少第一行。我第一次注意到这个问题是在我对一行进行查询时,当我在调试期间检查datatable的行数时,它返回了零行。然后,我将所有数据集与直接来自oracle源代码的data miner应用程序进行了比较,在使用该应用程序时,我似乎总是缺少第一行数据

这是代码。。。我将查询字符串更改为其他内容以维护公司隐私


Private Sub CaqOnSQL(strFileDirect As String)
        Try


            Dim connString As String = ConfigurationManager.ConnectionStrings("CA_Requisition_Attachments.Internal.ConnectionString").ConnectionString
            Dim conn As New OracleConnection With {
                    .ConnectionString = connString
                }

            Dim strQuerySQL As String = "SELECT * FROM REQUISITIONS " &
                                        "WHERE DATE BETWEEN TO_DATE('12/10/2020','MM/dd/yyyy') AND " &
                                        "TO_DATE('12/14/2020','MM/dd/yyyy') " &
                                        "ORDER BY ID"

            conn.Open()

            Dim Cmd As New OracleCommand(strQuerySQL, conn) With {
                .CommandType = CommandType.Text
            }
            Dim dr As OracleDataReader = Cmd.ExecuteReader()

            dr.read()
            Dim dt As New DataTable
            dt.TableName = "RESULTS"
            dt.Load(dr)


            ExcelFileCreation(dt, strFileDirect)

您应该删除该行:

dr.read()
调用
Read
会导致您在与DataTable Load方法结合使用时跳过第一行

此外,出于良好实践的目的,我还冒昧地对您的代码进行了一些额外的更改。当使用诸如Connection和Command之类的数据库对象时,应该使用块将它们包装起来,以确保尽快释放资源

    Dim dt As New DataTable()
    dt.TableName = "RESULTS"
    Using conn As New OracleConnection(connString)
        conn.Open()
        Dim strQuerySQL As String = "SELECT * FROM REQUISITIONS " &
                                    "WHERE DATE BETWEEN TO_DATE('12/10/2020','MM/dd/yyyy') AND " &
                                    "TO_DATE('12/14/2020','MM/dd/yyyy') " &
                                    "ORDER BY ID"
        Using command = New OracleCommand(strQuerySQL , conn)
            Using dataReader = command.ExecuteReader()
                dt.Load(dataReader)
            End Using
        End Using
    End Using

注意:在使用DataReaderas时,请小心使用块,因为您可能会发现在不希望连接关闭时连接已关闭。在这种情况下,DataReader完全在此函数中使用,并且使用安全。

您应该删除该行:

dr.read()
调用
Read
会导致您在与DataTable Load方法结合使用时跳过第一行

此外,出于良好实践的目的,我还冒昧地对您的代码进行了一些额外的更改。当使用诸如Connection和Command之类的数据库对象时,应该使用块将它们包装起来,以确保尽快释放资源

    Dim dt As New DataTable()
    dt.TableName = "RESULTS"
    Using conn As New OracleConnection(connString)
        conn.Open()
        Dim strQuerySQL As String = "SELECT * FROM REQUISITIONS " &
                                    "WHERE DATE BETWEEN TO_DATE('12/10/2020','MM/dd/yyyy') AND " &
                                    "TO_DATE('12/14/2020','MM/dd/yyyy') " &
                                    "ORDER BY ID"
        Using command = New OracleCommand(strQuerySQL , conn)
            Using dataReader = command.ExecuteReader()
                dt.Load(dataReader)
            End Using
        End Using
    End Using

注意:在使用DataReaderas时,请小心使用块,因为您可能会发现在不希望连接关闭时连接已关闭。在这种情况下,DataReader完全在此函数中使用,并且使用安全。

当您删除行
dr.read()
-我相信这是第一行被跳过的地方当您删除行
dr.read()
-我相信这是记录的第一行被跳过的地方,当块之间没有代码时,不需要使用块嵌套
。您可以使用一个
using
语句来创建命令和数据读取器,并用逗号分隔它们。谢谢您,这已经成功了@MarcusHerniquesj很高兴能提供帮助,请不要忘记将答案标记为已接受(带有绿色勾号),以便记录,当它们之间没有代码时,您不需要使用
块嵌套
。您可以使用一个
using
语句来创建命令和数据读取器,并用逗号分隔它们。谢谢您,这已经成功了@MarcusHerniquesj很高兴能为您提供帮助,请不要忘记将答案标记为已接受(带绿色勾号)