Ric*_*ard 4 .net c# sqldatareader
我正在尝试创建一个通用的 SqlDataReader,它将一个包含 33 列的表转换为一个列表。我希望每个列表项都包含每行的所有 33 个列值。
但是,我的代码将每个值分配给一个单独的列表项。
因此,我有 33,000 个列表项,而不是 1000 个列表项 = 1000 行数据。
我更喜欢在数据表上使用列表,因为我需要做的列表比较要简单得多。
我怎样才能有 1000 个列表项,每个列表项有 33 个值?
public static List<string> loadSQL(String query, String connectString)
{
List<string> dataList = new List<string>();
using (SqlConnection connection = new SqlConnection(connectString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i ++)
{
dataList.Add(Convert.ToString(reader.GetValue(i)));
}
}
}
}
return dataList;
}
}
Run Code Online (Sandbox Code Playgroud)
... 更新 ...
更正如下。它正确返回列表项。但是,我的列表包含 33,000 个项目,每个项目包含 33 个项目。如何控制循环使其在 1000 行后停止?
using (SqlConnection connection = new SqlConnection(connectString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
List<string> tempRow = new List<string>();
for (int i = 0; i < reader.FieldCount; i ++)
{
tempRow.Add(Convert.ToString(reader.GetValue(i)));
}
dataList.Add(tempRow);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
执行此任务的最佳选择是 DataTable,但您不想使用它。因此,net 选项将是,根据查询输出创建一个类,然后使用List<objectOftheClass>. 但是在您的情况下, Input 查询将始终更改,因此公共类将没有意义,因为您试图使其通用。因此,您可以遵循的选项是List<List<string>>或List<List<object>>。据此,方法签名将如下所示:
public static List<object[]> loadSQL(string query, string connectString)
{
List<object[]> dataList = new List<object[]>();
using (SqlConnection connection = new SqlConnection(connectString))
{
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
object[] tempRow = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
{
tempRow[i] = reader[i];
}
dataList.Add(tempRow);
}
}
}
}
return dataList;
}
Run Code Online (Sandbox Code Playgroud)
为什么List<object>?为什么不是`列表?:
读者会给你列数据作为表中相同类型的列。如果它是对象,那么您不需要每次都转换它。
**注: - **变化String,以string在方法签名的参数。你可以在这里找到原因