[英]Invalid attempt to read data when no data is present when getting all values from a row in a SQL Server table
我有一种方法可以在给定SQL查询的情况下返回所有列的var fieldCount = reader.GetValues(values)
,但是当行var fieldCount = reader.GetValues(values)
上Invalid attempt to read data when no data is present
,我看到Invalid attempt to read data when no data is present
。 values
它有88
项目。
internal List<string> GetColumnValuesForRow(SqlDataReader reader)
{
var listOfItems = new List<string>();
// Given a SqlDataReader, use the GetValues
// method to retrieve a full row of data.
// Test the GetValues method, passing in an array large
// enough for all the columns.
var values = new Object[reader.FieldCount];
var fieldCount = reader.GetValues(values);
Console.WriteLine("Retrieved {0} columns.",
fieldCount);
for (var i = 0; i < fieldCount; i++)
{
Console.WriteLine(values[i]);
listOfItems.Add(values[i].ToString());
}
return listOfItems;
}
我正在从此方法调用上述方法。
internal List<string> SqlQueryForRow(string query)
{
var conn = new SqlConnection(ConnectionString);
var cmd = new SqlCommand(query, conn);
SqlDataReader reader;
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
conn.Open();
reader = cmd.ExecuteReader();
// Data is accessible through the DataReader object here.
// TODO add handling for more than one row; i.e. just take the first row
var rowOfItems = GetColumnValuesForRow(reader);
conn.Close();
return rowOfItems;
}
为什么当我获取values
它显示88
项目,但是当我调用reader.GetValues(values)
Invalid attempt to read data when no data is present
抛出Invalid attempt to read data when no data is present
?
我测试的查询是SQL Server Management Studio,它只返回一条记录。
当从SQL数据库访问和读取行时,以下代码对我而言工作正常。 正如DJ KRAZE提到的,请始终先检查是否有任何行。
if (reader.HasRows)
{
while (reader.Read())
{
// Read all column data from row here, one row at a time
}
}
这个工作...
internal List<string> SqlQueryForRow(string query)
{
var conn = new SqlConnection(ConnectionString);
var cmd = new SqlCommand(query, conn)
{
CommandText = query,
CommandType = CommandType.Text,
Connection = conn
};
conn.Open();
var reader = cmd.ExecuteReader();
// Data is accessible through the DataReader object here.
// TODO add handling for more than one row; i.e. just take the first row
var rowOfItems = new List<string>();
if (reader.HasRows)
{
while (reader.Read())
{
rowOfItems = GetColumnValuesForRow(reader);
}
}
conn.Close();
return rowOfItems;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.