2016-09-15 47 views
0

我在SQL服务器中有10个表,我想将这些表值导出到包含10个表的ms访问数据库。那么有没有办法使用c#代码导出数据。 我不想为每个表写很多代码以从特定的表中获取数据,然后逐行插入到相应的访问表中是否有任何可用的快捷方式,请使用,请让我知道。如何将数据表值添加到ms访问表使用c#

+0

你没有提及到目前为止所尝试的任何内容。 – dotNET

+0

你也似乎没有在互联网上做过任何搜索。这个问题已经[在SO之前回答](http://stackoverflow.com/questions/22139100/export-sql-server-2008-database-into-ms-access-database)。 – dotNET

回答

0

嗯,我得到了答案。我用循环来生成如下所示的查询字符串。

public void MainAccess(int _i) 
    { 
     DataTable dt = ds.Tables[_i]; 
     string sql = ""; 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
     sql = sql + "INSERT INTO "+ _tableString[_i] + " values('"; 
     for (int j = 0; j < dt.Columns.Count; j++) 
     { 
      sql += dt.Rows[i][j].ToString().Trim(); 
      if (j != dt.Columns.Count - 1) 
      { 
       sql += "','"; 
      } 
      else 
      { 
       sql += "')"; 
      } 
     } 
     ExecuteQuery(sql); 
     sql = null; 
    } 
} 
0

我thik此代码可以帮助你。

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(); 
+0

不,这不会帮助我。我已将所有表存储到数据集中。现在我想要将这些表值插入ms访问的相应表中。我不想逐行插入,我只是想将整个表值转储到ms访问表值中。 – JeetDaloneboy

+0

@JeetDaloneboy:DataSet不能以这种方式工作。数据集通常是强类型的。即使它们不是你的情况,它们也需要CRUD命令(它们再次在行级别工作),以便每个表执行DDL。至少你需要在每对相应的SQL Server和Access表之间有一个转换函数。 – dotNET

+0

我不能将数据表值转储到访问表? – JeetDaloneboy

0

如果这是一个一次性的操作,你应该使用数据导出访问的SQL Server或导入功能功能执行此操作。对于不想编写代码的最终用户来说,它们会很简单。其中您只需选择数据库,要导出的表格和目标数据库,然后单击按钮即可导出所有内容。

+0

是的,这是最好的方式。 –

+0

但我想在ms访问中使用我的自定义表和列名称。 – JeetDaloneboy

+0

一旦你在Access中获得你的数据,你可以在那里重命名。 – dotNET

0

首先确保访问表列具有相同的列名称和类似的类型。然后你可以使用这个我认为非常快速和优雅的功能。

public void AccessBulkCopy(DataTable table) 
    { 
     foreach (DataRow r in table.Rows) 
      r.SetAdded(); 

var myAdapter = new OleDbDataAdapter("SELECT * FROM " + table.TableName, _myAccessConn); 

     var cbr = new OleDbCommandBuilder(myAdapter); 
     cbr.QuotePrefix = "["; 
     cbr.QuoteSuffix = "]"; 
     cbr.GetInsertCommand(true); 

     myAdapter.Update(table); 
    } 

使用此代码

+0

问题是访问表名和列名不同于sql表和列名。 :( – JeetDaloneboy

相关问题