2012-01-18 45 views
0

我有以下代码:写一个SQL的OleDbCommand从SqlServer的数据导入到Access数据库

ADOX.Catalog cat = new ADOX.Catalog(); 
string pathToNewAccessDatabase = "Data Source=D:\\Data\\NewMDB.mdb"; 

cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + pathToNewAccessDatabase + ";Jet OLEDB:Engine Type=5"); 

System.Data.OleDb.OleDbConnection AccessConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; " + pathToNewAccessDatabase); 

AccessConn.Open(); 
System.Data.OleDb.OleDbCommand AccessCommand = new System.Data.OleDb.OleDbCommand("SELECT * INTO [ReportFile] FROM [Data Source=server_path; Initial Catalog=database_name; User Id=user_name; Password=pass_word;Trusted_Connection=False].[dbo.DataSourceTable]", AccessConn); 

AccessCommand.ExecuteNonQuery(); 
AccessConn.Close(); 

我想从SQL SERVER选择到ACCESS数据库。

此外,如果密码包含[字符,我该如何逃避?

+1

我很有可能在内部引用SQL Server或Access数据库,并使用单个sql语句将其更新到另一个:http://stackoverflow.com/questions/3473380/help-withms -access-and-sql-server-2008/3475432#3475432 – Fionnuala 2012-01-18 20:04:48

+0

@Remou是的,你是对的,但是我必须在ordr中的SqlServer中进行更改以使其工作。我有点害怕,我可能会搞砸一些东西。 (如表演) – 2012-01-23 08:48:44

回答

1

我建议首先建立一个SQLConnection到SQL服务器,并将你想要的数据查询到一个DataTable中。

using (SqlConnection conn = new SqlConnection("yourConnectionString")) 
{ 
    using (SqlCommand comm = new SqlCommand("Select columns from targetTable", conn)) 
    {      
     SqlDataReader reader = comm.ExecuteReader(); 
     DataTable tbl = new DataTable(); 
     tbl.Load(reader); 
    } 
} 

在数据表中有数据后,通过循环访问数据为其插入命令创建查询。

string insertCommandString = string.Empty; 

for (int row = 0; row < tbl.Rows.Count; row++) 
{ 
    insertCommandString = "Insert into yourTableName(yourColumnNames) values("; 
    for (int column = 0; column < tbl.Columns.Count; column++) 
    { 
     if(tbl.Columns[column].DataType == typeof(String)) 
     { 
      insertCommandString += "'" + tbl.Rows[row][column].ToString() + "'"; 
     } 
     else 
     { 
      insertCommandString += tbl.Rows[row][column].ToString(); 
     } 

     if (column < tbl.Columns.Count - 1) 
     { 
      insertCommandString += ","; 
     } 
    } 

    insertCommandString += ")"; 

    System.Data.OleDb.OleDbCommand AccessCommand = new System.Data.OleDb.OleDbCommand(insertCommandString, AccessConn); 
    AccessCommand.ExecuteNonQuery(); 
} 

您不应该从密码中逃脱任何字符。

相关问题