ウィンドウ アプリケーションのデータ グリッド ビューに csv ファイルをインポートしました。100 を超えるレコードを持つ 40 列のデータです。今私が欲しいのは、グリッド ビュー データをデータベースに保存することです。一括挿入を試みましたが、エラーが発生しました: 宛先テーブルにアクセスできません。このような場合にテーブルを作成する方法がわかりません。つまり、40 列すべてを定義する必要があるということですか? csv ファイルをインポートするたびに列名が異なる場合はどうすればよいですか?
ここに私が試してきたコードがあります:
string rowValue="";
string[] cellValue;
DataTable dt = new DataTable();
if (System.IO.File.Exists(csvPath.Text))
{
System.IO.StreamReader streamReader = new StreamReader(csvPath.Text);
// Reading header
rowValue = streamReader.ReadLine();
cellValue = rowValue.Split(',');
for (int i = 0; i < cellValue.Count(); i++)
{
DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
column.Name = cellValue[i];
dataGridView1.Columns.Add(column);
}
// Reading content
while (streamReader.Peek() != -1)
{
rowValue = streamReader.ReadLine();
cellValue = rowValue.Split(',');
dataGridView1.Rows.Add(cellValue);
}
streamReader.Close();
}
else
{
MessageBox.Show("Please Select a File!");
}
dataGridView1.DataSource = dt;
データベース テーブルに保存する場合:
con = new System.Data.SqlClient.SqlConnection();
con.ConnectionString="Data Source=.\\SQLEXPRESS;AttachDbFilename=E:\\tushar\\dbLws.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
con.Open();
if (string.IsNullOrEmpty(tbName.Text.Trim()))
{
MessageBox.Show("Please supply Table Name");
}
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con.ConnectionString, SqlBulkCopyOptions.Default);
sqlBulkCopy.DestinationTableName = tbName.Text.Trim();
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
sqlBulkCopy.ColumnMappings.Add(dataGridView1.Columns[i].Name, dataGridView1.Columns[i].Name);
}
DataTable dt = new DataTable();
dt = (DataTable)dataGridView1.DataSource;
sqlBulkCopy.WriteToServer(dt);
sqlBulkCopy.Close();
MessageBox.Show("Saved successfully");
con.Close();
}