C#数据集访问数据库

我有一个从csv文件动态创建的数据集。 我想要做的是将行插入我的MS Access表,但我无法弄清楚从哪里开始。

数据集中数据的标题可以根据顺序而变化,但标题的名称将始终与访问数据库匹配。 我是否必须在insert命令中静态调用标题名称,还是可以从数据集中构建标题?

我知道如何创建连接并将其打开到数据库,但我不知道如何在insert命令中创建动态拉动表头。

在C#编程方面,我很绿,所以如果你能为我拼出来,我真的很感激!

以下是访问表标头的示例:

ID,项目,成本,零售

然后是CSV,它将填充数据集表。 它可能有零售或可能没有:

物品,成本

这是我到目前为止的代码,但它没有写入访问表。 如果我发现dtAccess它正确显示。

OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"C:\\Database.accdb\";Persist Security Info=False;"); myConnection.Open(); string queryString = "SELECT * from " + lblTable.Text; OleDbDataAdapter adapter = new OleDbDataAdapter(queryString, myConnection); DataTable dtAccess = new DataTable(); DataTable dtCSV = new DataTable(); dtCSV = ds.Tables[0]; using (new OleDbCommandBuilder(adapter)) { adapter.Fill(dtAccess); dtAccess.Merge(dtCSV); adapter.Update(dtAccess); } myConnection.Close(); 

弄清楚了。 这是我使用的代码:

 OleDbConnection myConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"Database.accdb\";Persist Security Info=False;"); //command to insert each ASIN OleDbCommand cmd = new OleDbCommand(); //command to update each column (ASIN, Retail... from CSV) OleDbCommand cmd1 = new OleDbCommand(); //load csv data to dtCSV datatabe DataTable dtCSV = new DataTable(); dtCSV = ds.Tables[0]; // Now we will collect data from data table and insert it into database one by one // Initially there will be no data in database so we will insert data in first two columns // and after that we will update data in same row for remaining columns // The logic is simple. 'i' represents rows while 'j' represents columns cmd.Connection = myConnection; cmd.CommandType = CommandType.Text; cmd1.Connection = myConnection; cmd1.CommandType = CommandType.Text; myConnection.Open(); for (int i = 0; i <= dtCSV.Rows.Count - 1; i++) { cmd.CommandText = "INSERT INTO " + lblTable.Text + "(ID, " + dtCSV.Columns[0].ColumnName.Trim() + ") VALUES (" + (i + 1) + ",'" + dtCSV.Rows[i].ItemArray.GetValue(0) + "')"; cmd.ExecuteNonQuery(); for (int j = 1; j <= dtCSV.Columns.Count - 1; j++) { cmd1.CommandText = "UPDATE " + lblTable.Text + " SET [" + dtCSV.Columns[j].ColumnName.Trim() + "] = '" + dtCSV.Rows[i].ItemArray.GetValue(j) + "' WHERE ID = " + (i + 1); cmd1.ExecuteNonQuery(); } } myConnection.Close(); 

Access具有隐藏表,这些表提供对数据库中表和列的数据库访问。 它们的名称取决于访问版本,但它们通常类似于systables? 已经有一段时间了,但是如果你“显示隐藏的桌子”,你应该能够找到它们。

如果两个数据表具有相同的结构,则可以将 “CSV”Datatable与Database表数据表合并 ,例如,您可以使用数据适配器将数据库表检索到数据表中:

 string queryString = "SELECT * FROM sometable"; SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection); DataTable dtAccess = new DataTable(); adapter.Fill(dtAccess); 

然后,您可以将此DataTable的内容与CSV DataTable的内容合并:

 dtAccess.Merge(dtCSV); 

之后,您可以使用命令构建器将数据表的内容写入访问数据库表:

  using (new SqlCommandBuilder(adapter)) { adapter.Update(dtAccess); } 

如果数据表具有相同的结构应该没有任何问题…