首頁 資料庫 mysql教程 SqlBulkCopy 快速插入数据到SqlServer 数据库

SqlBulkCopy 快速插入数据到SqlServer 数据库

Jun 07, 2016 pm 03:33 PM
sqlserver 快速 插入 數據

向SQL Server中导入大量数量可以用bulk insert,但是必须要求 插入 的文件在 数据 库机器上或者一个 数据 库可以访问的共享文件夹中(我不知道怎么设置共享文件夹,以使得SQL Server能访问到) SqlBulkCopy 是.net中的一个类,提供了导入大量 数据 的功能。

向SQL Server中导入大量数量可以用bulk insert,但是必须要求插入的文件在数据库机器上或者一个数据库可以访问的共享文件夹中(我不知道怎么设置共享文件夹,以使得SQL Server能访问到)

SqlBulkCopy 是.net中的一个类,提供了导入大量数据的功能。

基本用法如下:

<span>using </span><span>(</span><span>SqlBulkCopy </span><span>bc = </span><span>new </span><span>SqlBulkCopy</span><span>(sqlConn, </span><span>SqlBulkCopyOptions</span><span>.TableLock | </span><span>SqlBulkCopyOptions</span><span>.UseInternalTransaction, </span><span>null</span><span>))
{
     bc.BulkCopyTimeout = 10 * 60;
     bc.BatchSize = 10000;
     bc.DestinationTableName = </span><span>"dbo.Destination"</span><span>;
     bc.WriteToServer(reader); </span><span>//reader 是一个继承自IDataReader的类的实例
</span><span>}</span>
登入後複製

 

自己可以写代码来实现继承自IDataReader的类。有n多成员要实现。。。

比如FieldCount, Read(), GetValue(int i), Close()等

下面是一个读文件的例子:

<span>//返回记录的列数
        </span><span>public int </span><span>FieldCount  
        {
             </span><span>get </span><span>{ </span><span>return </span><span>3; }
        }

        </span><span>//读记录,此方法会被自动调用
        </span><span>public bool </span><span>Read()
        {
            </span><span>if </span><span>(_Reader == </span><span>null</span><span>)
                _Reader = </span><span>new </span><span>StreamReader</span><span>(_FilePath);

            </span><span>string </span><span>line = _Reader.ReadLine();
            
            </span><span>if </span><span>(line != </span><span>null</span><span>)
            {
                _CurrentQueryItem = GetRawData(line);
                _Count++;

                </span><span>while </span><span>(_CurrentQueryItem == </span><span>null</span><span>)</span><span>//如果读出的是不满足条件的记录,则读下一条记录
                </span><span>{
                    Read();
                }
                </span><span>return true</span><span>;
            }            
            </span><span>return false</span><span>;
        }

        </span><span>//返回一条记录中第i 列(项)的值,此方法会被自动调用
    //SqlBulkCopy内部应该有一个循环,从0到FieldCount -1 ,再调用GetValue(int i)这个方法。我猜的。。。
        </span><span>public object </span><span>GetValue(</span><span>int </span><span>i)
        {
            </span><span>if </span><span>(_CurrentQueryItem == </span><span>null</span><span>)
                </span><span>return null</span><span>;

            </span><span>switch </span><span>(i)
            {
                </span><span>//如果<strong>数据</strong>库中表的第一列是自增字段,则会忽略第一列,也就是说此方法被调用时,i只会从1开始,所以不需要case 0的情况。估计.net内部去取目的表的schema,自动判断哪些列是需要从外部导入的。有空再研究这个问题
                </span><span>case </span><span>0:
                    </span><span>return </span><span>_CurrentQueryItem.Item1;
                </span><span>case </span><span>1:
                    </span><span>return </span><span>_CurrentQueryItem.Item2;
                </span><span>case </span><span>2:
                    </span><span>return </span><span>_CurrentQueryItem.Item3;
                </span><span>default</span><span>:
                    </span><span>throw new </span><span>IndexOutOfRangeException</span><span>();
            }
        }

        </span><span>//释放资源
        </span><span>public void </span><span>Close()
        {
            Dispose();
        }

        </span><span>public void </span><span>Dispose()
        {
            </span><span>if </span><span>(_Reader != </span><span>null</span><span>)
                _Reader.Close();
        }</span>
登入後複製

 

有一些其他属性其方法需要自己实现,当然有的不实现也没关系。似乎重要的就以上几个方法了。
对照SqlDataRead,自己可以猜想出会用到哪些方法。

经过实验,一个文件如果一行一行插入数据库里,需要大约2分钟,如果用SqlBulkCopy 10秒左右就完成了。而且可以自己实现类来指定处理什么数据,也不用把文件放在数据库机器上了。不错。

忘说了,SqlBulkCopy里用到的connction对象只能是SqlConnection。SqlBulkCopy.WriteToServer (DataRow]) 和SqlBulkCopy.WriteToServer (DataTable) 都是可以的。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

sqlserver怎麼匯入mdf文件 sqlserver怎麼匯入mdf文件 Apr 08, 2024 am 11:41 AM

匯入步驟如下:將 MDF 檔案複製到 SQL Server 的資料目錄(通常為 C:\Program Files\Microsoft SQL Server\MSSQL\DATA)。在 SQL Server Management Studio(SSMS)中,開啟資料庫並選擇「附加」。點選“新增”按鈕,選擇 MDF 檔案。確認資料庫名稱,點選確定按鈕即可。

sqlserver資料庫中已存在名為的物件怎麼解決 sqlserver資料庫中已存在名為的物件怎麼解決 Apr 05, 2024 pm 09:42 PM

對於 SQL Server 資料庫中已存在同名對象,需要採取下列步驟:確認物件類型(表格、檢視、預存程序)。如果物件為空,可使用 IF NOT EXISTS 跳過建立。如果物件有數據,使用不同名稱或修改結構。使用 DROP 刪除現有物件(謹慎操作,建議備份)。檢查架構更改,確保沒有引用刪除或重新命名的物件。

怎麼查看sqlserver連接埠號 怎麼查看sqlserver連接埠號 Apr 05, 2024 pm 09:57 PM

若要查看 SQL Server 連接埠號碼:開啟 SSMS,連線到伺服器。在物件資源管理器中找到伺服器名稱,右鍵單擊它,然後選擇“屬性”。在「連線」標籤中,查看「TCP 連接埠」欄位。

sqlserver服務無法啟動怎麼辦 sqlserver服務無法啟動怎麼辦 Apr 05, 2024 pm 10:00 PM

當 SQL Server 服務無法啟動時,可採取下列步驟解決:檢查錯誤日誌以確定根本原因。確保服務帳戶具有啟動服務的權限。檢查依賴項服務是否正在執行。禁用防毒軟體。修復 SQL Server 安裝。如果修復不起作用,重新安裝 SQL Server。

sqlserver誤刪資料庫怎麼恢復 sqlserver誤刪資料庫怎麼恢復 Apr 05, 2024 pm 10:39 PM

若誤刪 SQL Server 資料庫,可採取下列步驟還原:停止資料庫活動;備份日誌檔案;檢查資料庫日誌;復原選項:從備份還原;從交易日誌還原;使用 DBCC CHECKDB;使用第三方工具。請定期備份資料庫並啟用交易日誌以防止資料遺失。

sqlserver資料庫在哪裡 sqlserver資料庫在哪裡 Apr 05, 2024 pm 08:21 PM

SQL Server 資料庫檔案通常儲存在下列預設位置:Windows: C:\Program Files\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data可透過修改資料庫檔案路徑設定來自訂資料庫檔案位置。

iPhone上的蜂窩數據網路速度慢:修復 iPhone上的蜂窩數據網路速度慢:修復 May 03, 2024 pm 09:01 PM

在iPhone上面臨滯後,緩慢的行動數據連線?通常,手機上蜂窩互聯網的強度取決於幾個因素,例如區域、蜂窩網絡類型、漫遊類型等。您可以採取一些措施來獲得更快、更可靠的蜂窩網路連線。修復1–強制重啟iPhone有時,強制重啟設備只會重置許多內容,包括蜂窩網路連線。步驟1–只需按一次音量調高鍵並放開即可。接下來,按降低音量鍵並再次釋放它。步驟2–過程的下一部分是按住右側的按鈕。讓iPhone完成重啟。啟用蜂窩數據並檢查網路速度。再次檢查修復2–更改資料模式雖然5G提供了更好的網路速度,但在訊號較弱

sqlserver安裝失敗怎麼樣刪除乾淨 sqlserver安裝失敗怎麼樣刪除乾淨 Apr 05, 2024 pm 11:27 PM

如果 SQL Server 安裝失敗,可透過下列步驟清理:解除安裝 SQL Server刪除註冊表項刪除檔案和資料夾重新啟動計算機

See all articles