我有一個包含大約21個lac條目的文本文件,我想將所有這些條目插入表中。最初,我在c#中創建了一個函數,它可以一行一行地讀取並插入到表格中,但它需要很長時間。請建議插入這些批量數據的有效方法,並且該文件包含TAB(4個空格)作爲分隔符。
而且該文本文件也包含一些重複的條目,我不想插入這些條目。在MS SQL中從文本文件批量插入
回答
加載所有的數據到一個DataTable
對象,然後使用SqlBulkCopy
批量插入它們:
DataTable dtData = new DataTable("Data");
// load your data here
using (SqlConnection dbConn = new SqlConnection("db conn string"))
{
dbConn.Open();
using (SqlTransaction dbTrans = dbConn.BeginTransaction())
{
try
{
using (SqlBulkCopy dbBulkCopy = new SqlBulkCopy(dbConn, SqlBulkCopyOptions.Default, dbTrans))
{
dbBulkCopy.DestinationTableName = "intended SQL table name";
dbBulkCopy.WriteToServer(dtData);
}
dbTrans.Commit();
}
catch
{
dbTrans.Rollback();
throw;
}
}
dbConn.Close();
}
我已經包括了包裝成SqlTransaction
這個例子中這樣就會有一個完整的回滾,如果有一路上失敗。爲了讓您開始,here's a good CodeProject article將分隔數據加載到DataSet
對象中。加載
確定之前
消毒的數據,這裏就是我想你的數據看起來:
CC_FIPS FULL_NAME_ND
AN Xixerella
AN Vila
AN Sornas
AN Soldeu
AN Sispony
... (cut down for brevity)
您要創建DataTable
像這樣的這種情況:
DataTable dtData = new DataTable("Data");
dtData.Columns.Add("CC_FIPS");
dtData.Columns.Add("FULL_NAME_ND");
然後你想迭代每一行(假設你的製表符分隔的數據是由回車逐行分隔的rns),並使用.Select
方法檢查這個數據是否已經存在於DataTable
中,如果匹配(我正在檢查兩個值,這取決於你是否想要做其他事情),那麼不要添加它防止重複。
using (FileStream fs = new FileStream("path to your file", FileMode.Open, FileAccess.Read))
{
int rowIndex = 0;
using (StreamReader sr = new StreamReader(fs))
{
string line = string.Empty;
while (!sr.EndOfStream)
{
line = sr.ReadLine();
// use a row index to skip the header row as you don't want to insert CC_FIPS and FULL_NAME_ND
if (rowIndex > 0)
{
// split your data up into a 2-d array tab delimited
string[] parts = line.Split('\t');
// now check whether this data has already been added to the datatable
DataRow[] rows = dtData.Select("CC_FIPS = '" + parts[0] + "' and FULL_NAME_ND = '" + parts[1] + "'");
if (rows.Length == 0)
{
// if there're no rows, then the data doesn't exist so add it
DataRow nr = dtData.NewRow();
nr["CC_FIPS"] = parts[0];
nr["FULL_NAME_ND"] = parts[1];
dtData.Rows.Add(nr);
}
}
rowIndex++;
}
}
}
在本月底,你應該有一個消毒DataTable
,你可以批量插入。請注意,這段代碼沒有經過測試,但是對於你應該怎麼做這是一個最好的猜測。有很多方法可以完成,並且可能比這個方法(特別是LINQ)好很多 - 但這是一個起點。
該文本文件有一些重複的條目,我不想插入這些條目。那麼我怎麼能忽略這些條目呢? –
@PuneetPurohit你需要清理你的數據(最好)在加載到'DataTable'之前。有很多方法可以做到這一點。就我個人而言,我會從現有數據創建一個派生的,清理過的集合,並將派生集合加載到'DataTable'中。我們可以看到您的數據樣本嗎? –
CC_FIPS \t FULL_NAME_ND AN \t Xixerella AN \t維拉 AN \t Sornas AN \t索爾德 AN \t Sispony的 AN \t Segudet AN \t埃爾塔特 AN \t聖利亞洛里亞 AN \t聖瓊德卡塞列斯 AN \t聖科洛馬 \t Ransol AN AN AN \t普拉茨 \t帕斯底拉卡薩 \t帕爾 AN AN AN 奧爾迪諾\t \t \t Molleres Nagol AN AN AN \t \t裏克斯爾 Ribafeta 馬斯馬斯Alins的 \t AN AN AN Llumeneres \t \t –
- 1. MS SQL批量插入
- 2. C#批量從文本文件插入SQL與多個行
- 3. 導入文本文件到SQL Server使用批量插入
- 4. SQL Server批量插入Http文件
- 5. 從不規則的平面文件批量插入到MS SQL Server
- 6. 批量插入CSV文件
- 7. 使用RODBC的MS-SQL批量插入
- 8. 批量插入CSV文件
- 9. 使用批量插入將文本文件插入Oracle
- 10. 無法從SQL中的平面文件批量插入
- 11. 從固定格式文本文件批量插入忽略rowterminator
- 12. 使用c分隔文本文件在SQL Server表中批量插入數據#
- 13. 多行插入SQL,從文本文件
- 14. 在MS Access中批量插入數據
- 15. 使用批量插入將文件插入到SQL Server 2008 R2
- 16. 如何在WatiN的文本字段中插入批量文本
- 17. 在SQL Server中批量插入多個文件
- 18. 從.txt爲批量插入創建一個SQL格式文件
- 19. 批量插入文本文件中的行
- 20. 如何在ms-sql服務器中插入韓文文本?
- 21. MS SQL Server - 從本地文件批量插入 - 如何在Mac OS上指示路徑?
- 22. 用格式文件和批量插入導入SQL Server
- 23. 批量SQL插入
- 24. Sql批量插入
- 25. 批量從Excel插入到SQL Server中
- 26. 從SQL Server中的XML批量插入
- 27. 批量插入fmt文本限定符
- 28. 從文本文件中導入不同數量的字段到MS SQL
- 29. 無法檢索從文本文件中的特定字段批量插入
- 30. SQL Server中批量加載時插入文件名
嘗試從表格中刪除約束並刪除索引。你可能也想看看BULK INSERT的sql語句。 – Eugene
該文本文件有一些重複的條目,我不想插入這些條目。 –