C# 将DataGridView导出到SQLServer
我有一个DataGridView,其中包含使用以下代码从.csv文件成功导入的数据。用户可以对DGV中的列重新排序。我需要使用列的显示索引顺序而不是索引顺序将数据导出到SQL Server数据库C# 将DataGridView导出到SQLServer,c#,sql-server,csv,datagridview,export,C#,Sql Server,Csv,Datagridview,Export,我有一个DataGridView,其中包含使用以下代码从.csv文件成功导入的数据。用户可以对DGV中的列重新排序。我需要使用列的显示索引顺序而不是索引顺序将数据导出到SQL Server数据库 private void btn_Upload_Click(object sender, EventArgs e) { char colDelimiter = ','; char rowDelimiter = '\r'; DataTable
private void btn_Upload_Click(object sender, EventArgs e)
{
char colDelimiter = ',';
char rowDelimiter = '\r';
DataTable dataTable = new DataTable();
OpenFileDialog getFile = new OpenFileDialog();
getFile.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*";
getFile.FilterIndex = 1;
if(getFile.ShowDialog() == DialogResult.OK)
{
string fileName = getFile.FileName;
TextReader reader = new StreamReader(getFile.FileName);
string[] columns = reader.ReadLine().Split(colDelimiter);
int x = 0;
foreach(string c in columns)
{
dataTable.Columns.Add(columns[x]);
x += 1;
}
x = 0;
string[] rows = reader.ReadToEnd().Split(rowDelimiter);
foreach (string r in rows)
{
string[] record = r.Split(colDelimiter);
dataTable.Rows.Add(record);
}
this.dataGridView1.DataSource = dataTable;
MessageBox.Show(fileName + " was successfully imported.");
}
不幸的是,这是我所知道的最好的解决方案:基于dataGridView显示的表创建一个新表。然后用新的数据表替换原来的数据表。我假设在本例中有一个名为table的DataTable 希望这有帮助,我希望有一个更简单的方法,但如果你正在做一个大型的更新命令,这是我知道的最简单的方法 如果您正在使用SQL查询或其他方法手动更新每一行,那么您只需确保更新基于DisplayIndex和DataGridView,而不是直接基于DataTable
//Make a new DataTable
DataTable newTable = new DataTable();
//Create Columns based on DataGridView headers
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
newTable.Columns.Add(col.HeaderText);
}
//Add each row of data from DataGridView into new DataTable in the displayed order
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataRow newRow = newTable.NewRow();
foreach(DataGridViewCell cell in row.Cells)
{
newRow[cell.ColumnIndex] = cell.Value;
}
newTable.Rows.Add(newRow);
}
//Set your original DataTable to the new DataTable with the correct ordering
table = newTable;
另外,作为说明,我正在查看最初如何加载.csv 我在基于分隔符进行拆分时遇到了类似的情况,我只是确保在加载.csv的位置包含Schema.ini,然后使用ADO命令填充数据表。这对我来说似乎要快得多 请参阅my Schema.ini,它以逗号分隔:
[tempdata.csv]
Format=Delimited(,)
ColNameHeader=True
MaxScanRows=0
以下是include命令:
using System.Data.OleDb;
下面是使用dataAdapter填充填充我的DataTable的C代码,将绑定源设置为DataTable,然后将我的dataGridView的数据源设置为绑定源:
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + workingPath + ";Extended Properties=\"text;HDR=YES;FMT=Delimited(|)\"";
using (OleDbConnection conn = new OleDbConnection(connString))
{
using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM " + workingFilename, conn))
{
conn.Open();
OleDbDataAdapter dAdapter = new OleDbDataAdapter(cmd);
originalTable = new DataTable("");
dAdapter.Fill(originalTable);
}
}
表已经存在还是您也需要创建它?@RyanB表已经存在。但是,不能保证csv中的列名与表中的列名匹配。