Visual Studio Vb.net从oracle查询加载的数据集缺少或替换第一行数据
我有一个vb.net应用程序,可以查询oracle/labdaq数据库并将数据集加载到datatable中。出于某种原因,查询工作正常,没有引发异常,但是,当我加载数据时,它似乎缺少第一行。我第一次注意到这个问题是在我对一行进行查询时,当我在调试期间检查datatable的行数时,它返回了零行。然后,我将所有数据集与直接来自oracle源代码的data miner应用程序进行了比较,在使用该应用程序时,我似乎总是缺少第一行数据 这是代码。。。我将查询字符串更改为其他内容以维护公司隐私Visual Studio Vb.net从oracle查询加载的数据集缺少或替换第一行数据,vb.net,oracle,datatable,Vb.net,Oracle,Datatable,我有一个vb.net应用程序,可以查询oracle/labdaq数据库并将数据集加载到datatable中。出于某种原因,查询工作正常,没有引发异常,但是,当我加载数据时,它似乎缺少第一行。我第一次注意到这个问题是在我对一行进行查询时,当我在调试期间检查datatable的行数时,它返回了零行。然后,我将所有数据集与直接来自oracle源代码的data miner应用程序进行了比较,在使用该应用程序时,我似乎总是缺少第一行数据 这是代码。。。我将查询字符串更改为其他内容以维护公司隐私 Priv
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很高兴能为您提供帮助,请不要忘记将答案标记为已接受(带绿色勾号)