我正在将DataGridView导出到CSV文件,但遇到此问题:
当我尝试使用表名(ds.Tables [“ tableName”])时,它抛出了异常"System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.Data.DataTableCollection.this[string].get returned null.
"
但是它正在使用表的索引:ds.Tables [0]。
就我而言,我只有表格的名称。
我已经尝试使用ds.Tables [“ dbo.tableName”]和ds.Tables [(row.Cells [“ 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("\r\n");
}
StreamWriter file = new StreamWriter(@"D:\Projects\AlatiWF\data.csv");
file.WriteLine(stringBuilder.ToString());
file.Close();
}
}
}
}
答案 0 :(得分:0)
SqlDataAdapter不够灵巧,无法确定您的查询仅访问单个表,因此它将始终返回这样的表:“ Table0”,“ Table1”,“ Table2”等。
Table [0]之所以起作用,是因为它正在访问名为“ Table0”的表。您可以在调用sqlData.Fill(ds)之后为表指定合理的名称,例如:
ds.Tables[0].TableName = "SensibleTableName";
答案 1 :(得分:0)
直接填充数据表,而无需数据集。
DataTable dt = new DataTable();
sqlData.Fill(dt);
foreach (DataRow dataRow in dt.Rows)
{