• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    如何將數據導入到SQLServerCompactEdition數據庫中(四)

    來源:懂視網 責編:小采 時間:2020-11-09 15:45:02
    文檔

    如何將數據導入到SQLServerCompactEdition數據庫中(四)

    如何將數據導入到SQLServerCompactEdition數據庫中(四):系列文章導航: 如何將數據導入到 SQL Server Compact Edition 數據庫中(一) 如何將數據導入到 SQL Server Compact Edition 數據庫中(二) 如何將數據導入到 SQL Server Compact Edition 數據庫中(三) 摘要:在本系列文章的第一篇和第二篇
    推薦度:
    導讀如何將數據導入到SQLServerCompactEdition數據庫中(四):系列文章導航: 如何將數據導入到 SQL Server Compact Edition 數據庫中(一) 如何將數據導入到 SQL Server Compact Edition 數據庫中(二) 如何將數據導入到 SQL Server Compact Edition 數據庫中(三) 摘要:在本系列文章的第一篇和第二篇

    系列文章導航: 如何將數據導入到 SQL Server Compact Edition 數據庫中(一) 如何將數據導入到 SQL Server Compact Edition 數據庫中(二) 如何將數據導入到 SQL Server Compact Edition 數據庫中(三) 摘要:在本系列文章的第一篇和第二篇為了提高數據寫

    系列文章導航:
    如何將數據導入到 SQL Server Compact Edition 數據庫中(一)
    如何將數據導入到 SQL Server Compact Edition 數據庫中(二)
    如何將數據導入到 SQL Server Compact Edition 數據庫中(三)

    摘要:在本系列文章的第一篇和第二篇為了提高數據寫入的性能,我使用了 SqlCeResultSet 基于表的數據寫入方式,而不是使用常規的 Insert 語句。使用 SqlCeResultSet 寫入數據確實方便又快速,但是必須保證從源數據庫查詢的結果集(通過 Select 查詢語句)跟目標數據庫(SQL Server Compact Edition)表的字段先后順序一致。如果不一致,可能會導致數據導入出錯;即便是導入成功,數據跟原來的字段位置也對不上。所以,我覺得有必要給大家介紹常規的 Insert 語句數據插入方式,解決 SqlCeResultSet 存在的問題。

    在第三篇文章中,我們學習了 IDataReader.GetSchemaTable 方法,它可以返回一個描述了 DataReader 查詢結果中各列的元數據的 DataTable。在前面的文章介紹的數據導入方法中,都是使用 DataReader 從源數據庫讀取數據。那么從這個 DataReader 獲取的 SchemaTable 信息,就可以用于生成插入數據的 Insert 語句,前提是源數據庫和目標數據庫的表字段名稱一致,字段的先后順序可以不一樣。以下是根據 SchemaTable 生成 Insert 語句的代碼:

    // 通過 DataReader 獲取 SchemaTable 信息
    srcReader = srcCommand.ExecuteReader(CommandBehavior.KeyInfo);
    DataTable scheamTable = srcReader.GetSchemaTable();

    // 生成 SQL Server Compact Edition 數據插入 SQL 語句
    StringBuilder sbFields = new StringBuilder();
    StringBuilder sbParams = new StringBuilder();
    string field, param;
    DataRow schemaRow;
    for (int i = 0; i < scheamTable.Rows.Count; i++)
    {
    if (i != 0)
    {
    sbFields.Append(", ");
    sbParams.Append(", ");
    }

    schemaRow = scheamTable.Rows[i];
    field = string.Format("[{0}]", schemaRow["ColumnName"]); //字段名稱
    param = "@" + ((string)schemaRow["ColumnName"]).Replace(" ", "_"); //參數名稱
    sbFields.Append(field);
    sbParams.Append(param);
    destCommand.Parameters.Add(param, null);
    }

    string insertSql = string.Format("INSERT INTO [{0}]({1}) VALUES({2})", destTableName, sbFields, sbParams);
    destCommand.CommandText = insertSql;

    生成 Insert 語句的代碼很簡單,這里就不再詳細說明了。準備好了 Insert 語句,就可以開始從源數據庫取數據并寫入目標數據庫了。這里我使用了 DataReader.GetValues 方法一次性讀取一整行數據,再給 Insert 命令的參數賦值。代碼如下所示:

    // 執行數據導入
    object[] values;
    while (srcReader.Read())
    {
    values = new object[srcReader.FieldCount];
    srcReader.GetValues(values);
    for (int i = 0; i < values.Length; i++)
    {
    destCommand.Parameters[i].Value = values[i];
    }
    destCommand.ExecuteNonQuery();
    }

    本文的主要內容到這里已經介紹完了,我們可以結合第三篇文章介紹的根據 SchemaTable 自動生成創建表結構的 SQL 語句的代碼,在導入數據前先自動創建數據表結構。相關的代碼如下:

    // 通過 DataReader 獲取 SchemaTable 信息
    srcReader = srcCommand.ExecuteReader(CommandBehavior.KeyInfo);
    DataTable scheamTable = srcReader.GetSchemaTable();

    // 創建 SQL Server Compact Edition 表結構
    SqlCeCommand command = destConnection.CreateCommand();
    command.CommandText = GenerateTableSchemaSql(scheamTable);
    command.ExecuteNonQuery();

    // 生成 SQL Server Compact Edition 數據插入 SQL 語句
    StringBuilder sbFields = new StringBuilder();
    StringBuilder sbParams = new StringBuilder();
    ......

    通過遍歷 SQL Server 2000 的 Northwind 數據庫的每個用戶表,并將每個表的數據導入到一個 SQL Server Compact Edition 數據文件 Northwind.sdf 中。代碼如下所示:

    // 創建源 SQL Server 數據庫連接對象
    string srcConnString = "Data Source=(local);Initial Catalog=Northwind;Integrated Security=True";
    SqlConnection srcConnection = new SqlConnection(srcConnString);

    // 創建目標 SQL Server Compact Edition 數據庫連接對象
    string destConnString = @"Data Source=C:/Northwind.sdf";
    SqlCeConnection destConnection = new SqlCeConnection(destConnString);

    // 創建 SQL Server Compact Edition 數據文件
    VerifyDatabaseExists(destConnString);

    srcConnection.Open();
    destConnection.Open();

    // 復制數據
    string[] tableNames = GetTableNames(srcConnection);
    string query;
    for (int i = 0; i < tableNames.Length; i++)
    {
    query = string.Format("SELECT * FROM [{0}]", tableNames[i]);
    CopyTable(srcConnection, destConnection, query, tableNames[i]);
    }

    srcConnection.Close();
    destConnection.Close();

    同第二篇文章相比,本文中的 VerifyDatabaseExists 方法只創建 SQL Server Compact Edition 數據文件,不批量創建表結構,因為我們用上了“自動”的方法,不需要預先準備好創建表結構的 SQL 腳本。GetTableNamesGenerateTableSchemaSql 方法跟第三篇文章的一樣,這里不再解釋。

    總結:本文介紹了一種比 SqlCeResultSet 更安全的數據寫入方式,并結合了第三篇文章中介紹的自動生成創建數據庫表結構的 SQL 語句的方法,向大家展示了一種比較完善的 SQL Server Compact Edition 數據導入方法。在后續的文章中我會繼續深入下去,提供本方案在實際應用中面臨的問題的解決方法。

    示例代碼下載:sqlce_data_import4.rar

    作者:黎波
    博客:http://upto.cnblogs.com/
    日期:2008年2月9日

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    如何將數據導入到SQLServerCompactEdition數據庫中(四)

    如何將數據導入到SQLServerCompactEdition數據庫中(四):系列文章導航: 如何將數據導入到 SQL Server Compact Edition 數據庫中(一) 如何將數據導入到 SQL Server Compact Edition 數據庫中(二) 如何將數據導入到 SQL Server Compact Edition 數據庫中(三) 摘要:在本系列文章的第一篇和第二篇
    推薦度:
    標簽: 數據 導入 如何
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品亚洲成a人片在线观看| 久久精品国产亚洲精品2020| 亚洲精品国产高清不卡在线| 精品久久久久久| 日韩精品一区二区三区中文| 久久99精品久久久久久秒播| 91精品最新国内在线播放| 亚洲A∨午夜成人片精品网站| 日韩精品在线一区二区| 国产欧美日韩精品a在线观看 | 99久久99久久精品国产片| 99在线精品免费视频九九视| 一本色道久久综合亚洲精品| 欧美日韩精品系列一区二区三区| 88久久精品无码一区二区毛片 | 国产精品无码免费播放| 久久99国产精品99久久| 第一福利永久视频精品| 精品不卡一区二区| 久久亚洲欧美国产精品| 亚洲精品无码久久久久| 日韩精品中文字幕第2页| 久久精品无码免费不卡| 国产一区麻豆剧传媒果冻精品| 久久免费精品视频| 国产精品一区二区久久精品| 97r久久精品国产99国产精| 孩交VIDEOS精品乱子| 欧美精品黑人粗大免费| 日韩一区精品视频一区二区| 无码日韩人妻精品久久蜜桃 | 国产精品麻豆VA在线播放| 51久久夜色精品国产| 欧美视频精品一区二区三区| 久久精品成人免费网站| 国产精品久久久久aaaa| 国产偷亚洲偷欧美偷精品 | 国产精品美女久久久久久2018| 国产欧美日韩精品a在线观看| 国产产无码乱码精品久久鸭| 99久久人妻无码精品系列蜜桃|