OracleDataReader reader.Read() 从第二个记录行开始读取行,跳过第一行记录
Posted
技术标签:
【中文标题】OracleDataReader reader.Read() 从第二个记录行开始读取行,跳过第一行记录【英文标题】:OracleDataReader reader.Read() starts to read rows from the second record row, skipping the first row record 【发布时间】:2021-07-21 20:34:10 【问题描述】:我有一个 SQL 命令,它从数据库返回 8 行。
当我使用 reader.Read() 时,它从第二行开始,所以我松开了第一行结果。我不知道为什么它会跳过第一行记录。
command.CommandText = "SELECT ATTRIBUTE_DESCRIPTION, SUBSTR(ATTRIBUTE_DATATYPE, 2, 6) FROM " + proj.PID_Schema + "PIDD.ATTRIBUTES@" + proj.PID_Database + " WHERE " +
"attribute_name LIKE 'Controller' " +
"OR attribute_name LIKE 'Initials' " +
"OR attribute_name LIKE 'IOType' " +
"OR attribute_name LIKE 'NetworkType' " +
"OR attribute_name LIKE 'SignalOutput' " +
"OR attribute_name LIKE 'SignalInput' " +
"OR attribute_name LIKE 'SPIInstrumentType' " +
"OR attribute_name LIKE 'Substation' ORDER BY 1";
try
reader = command.ExecuteReader();
reader.Read();
if (reader.HasRows)
while (reader.Read())
codelistsNumbersDict.Add(reader.GetValue(0).ToString(), reader.GetValue(1).ToString());
catch (Exception)
connection.Close();
return codelistsNumbersDict;
【问题讨论】:
使用适当的参数化,不要将数据连接到查询中。 请参阅***.com/questions/7505808/… 和bobby-tables.com。此外,您可以为查询使用逐字字符串@"SELECT...
,然后您可以在字符串中使用换行符。此外,不要吞下带有空 catch
块的异常,并始终使用 using
块处理连接、命令和读取器
【参考方案1】:
你有两读吗:
reader = command.ExecuteReader();
reader.Read(); // <--- FIRST READ (skipe first row)
if (reader.HasRows)
while (reader.Read()) // <---- SECOND READ
因此,您从第二行开始阅读。
如果您查看Retrieve data using a DataReader 示例,它只有一个内容:
SqlDataReader reader = command.ExecuteReader();
// <-- No read here on sample!
if (reader.HasRows)
while (reader.Read()) // <-- Just ONE READ
【讨论】:
【参考方案2】:正如@dani-herrera 的回答中所提到的,您拨打了两次reader.Read()
。
另外,您不需要if (reader.HasRows)
,因为如果没有行,do 循环内的代码将不会执行。如果您需要知道处理的行数,您可以随时添加计数器。
try
reader = command.ExecuteReader();
while (reader.Read())
codelistsNumbersDict.Add(reader.GetValue(0).ToString(), reader.GetValue(1).ToString());
【讨论】:
以上是关于OracleDataReader reader.Read() 从第二个记录行开始读取行,跳过第一行记录的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中将 OracleDataReader 导出到 Excel
如何使用 OracleDataReader 检索给定记录的所有字段?
C# Oracle OracleDataReader.Read()