【问题标题】:Writing an SQL OleDbCommand to import data from SqlServer To An Access Database编写 SQL Ole Db 命令以将数据从 Sql Server 导入 Access 数据库
【发布时间】:2012-02-13 05:38:22
【问题描述】:

我有以下代码:

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 数据库。

另外,如果密码中包含[ 字符,我该如何转义呢?

【问题讨论】:

  • 我很可能内联引用 SQL Server 或 Access 数据库,并使用一条 sql 语句更新一个到另一个:stackoverflow.com/questions/3473380/…
  • @Remou 是的,你是对的,但我必须在 SqlServer 中进行一些更改才能使其正常工作。我有点害怕我可能会搞砸一些事情。 (如表演)

标签: sql-server ms-access import oledbconnection oledbcommand


【解决方案1】:

我建议先与 SQL 服务器建立 SQLConnection,然后将所需的数据查询到 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();
 }

您不应从密码中转义任何字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    相关资源
    最近更新 更多