DS.表[ "TableName" ] 抛出异常"System.Data.DataTableCollection.this[string].get returned null."



我正在处理将数据网格视图导出到 CSV 文件,我遇到了这个问题: 当我尝试使用表名 ( ds.表["表名称"] ( 它抛出了一个异常"System.NullReferenceException: 'Object reference not set to an instance of an object.' System.Data.DataTableCollection.this[string].get returned null. "但它正在使用表的索引:DS。表格[0]。 就我而言,我只有表的名称。

我试过用 ds。Tables["dbo.tableName"] 也 ds.表[(行。单元格["table_name"]。Value.ToString(((]

这是我的代码:

{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
foreach (DataGridViewRow row in TableNamesGrid.Rows)
{
bool isSelected = Convert.ToBoolean(row.Cells["CheckBox"].Value);
if (isSelected)
{
StringBuilder stringBuilder = new StringBuilder();
SqlDataAdapter sqlData = new SqlDataAdapter("SELECT * FROM " + row.Cells[1].Value, sqlConnection);
DataSet ds = new DataSet();
sqlData.Fill(ds);
foreach (DataRow dataRow in ds.Tables[(row.Cells["table_name"].Value.ToString())].Rows)
{
for (int i = 0; i <= ds.Tables[(row.Cells["table_name"].Value.ToString())].Rows.Count; i++)
{
stringBuilder.Append(dataRow[i].ToString() + ",");
}
stringBuilder.Append("rn");
}
StreamWriter file = new StreamWriter(@"D:ProjectsAlatiWFdata.csv");
file.WriteLine(stringBuilder.ToString());
file.Close();
}
}
}
}

SqlDataAdapter 不够智能,无法确定您的查询只是访问单个表,因此它将始终返回如下命名的表:"Table0"、"Table1"、"Table2"等。

Table[0] 之所以有效,是因为它正在访问名为 "Table0" 的表。 在调用 sqlData.Fill(ds( 后,您可以通过执行以下操作为表指定合理的名称:

ds.Tables[0].TableName = "SensibleTableName";

直接填充数据表,不填写数据集。

DataTable dt = new DataTable();
sqlData.Fill(dt);
foreach (DataRow dataRow in dt.Rows)
{

相关内容

最新更新