詳解C#把DataTable中數(shù)據(jù)一次插入數(shù)據(jù)庫(kù)的方法
現(xiàn)在實(shí)際的情況是這樣的:
客戶有一臺(tái)打卡機(jī),員工打卡的信息全部?jī)?chǔ)存在打卡機(jī)的Access數(shù)據(jù)庫(kù)里面,現(xiàn)在客戶引入了一種新的管理系統(tǒng),需要將Access數(shù)據(jù)庫(kù)中的打卡數(shù)據(jù)同步到SQL Server數(shù)據(jù)庫(kù)中,由于時(shí)間比較久,數(shù)據(jù)積累了有40多萬(wàn)條。
軟件功能:
選擇Access數(shù)據(jù)庫(kù)文件,填入目標(biāo)SQL Server數(shù)據(jù)庫(kù)的IP地址,然后開始進(jìn)行同步。
實(shí)現(xiàn)方法:
1、先把Access數(shù)據(jù)庫(kù)中要導(dǎo)入的數(shù)據(jù)存入DataTable中
配置文件中的數(shù)據(jù)庫(kù)連接字符串
<connectionStrings> <add name="oleConStr" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="/> <add name="sqlConStr" connectionString ="server=tiantiankaixing;database=新建數(shù)據(jù)庫(kù);trusted_connection=sspi"/> </connectionStrings>
封裝讀取Access數(shù)據(jù)庫(kù)數(shù)據(jù)到DataTable中的方法
public static string OleConStr = ConfigurationManager.ConnectionStrings["oleConStr"].ConnectionString ;
public static DataTable OleGetDataTable(string sql, string filePath)
{
string a = OleConStr + filePath;
using (OleDbConnection conn = new OleDbConnection(a))
{
using (OleDbDataAdapter da = new OleDbDataAdapter(sql, conn))
{
try
{
conn.Open();
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
}
}
}
讀取目標(biāo)Access數(shù)據(jù)庫(kù)到Datatable
string sql = "select Id,Time from checkinout"; DataTable dt = AcHelper.OleGetDataTable(sql, @"F:\project\tiantiankaixing\admin.mdb");
2、封裝批量插入數(shù)據(jù)SQL Server數(shù)據(jù)的方法
public static void DataTableToSQLServer(DataTable dt,string connectString)
{
string connectionString = connectString;
using (SqlConnection destinationConnection = new SqlConnection(connectionString))
{
destinationConnection.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection))
{
try
{
bulkCopy.DestinationTableName = "checkinout";//要插入的表的表名
bulkCopy.BatchSize = dt.Rows.Count;
bulkCopy.ColumnMappings.Add("ID", "ID");//映射字段名 DataTable列名 ,數(shù)據(jù)庫(kù) 對(duì)應(yīng)的列名
bulkCopy.ColumnMappings.Add("TIME", "TIME");
bulkCopy.WriteToServer(dt);
System.Windows.Forms.MessageBox.Show("插入成功");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
}
}
}
}
3、調(diào)用DataTableToSQlServer()方法
string localCon = "server=tiantiankaixing;database=Test;trusted_connection=sspi"; Entity.DataTableToSQLServer(dt, localCon);
即可將DataTable中的全部數(shù)據(jù)插入數(shù)據(jù)庫(kù)
附:SqlBulkCopy的簡(jiǎn)單使用方法
public void Test()
{
string connectionString = "server=tiantiankaixing;database=新建數(shù)據(jù)庫(kù);trusted_connection=sspi";
using (SqlConnection sourceConnection =
new SqlConnection(connectionString))
{
sourceConnection.Open();
//獲取讀取的表總行數(shù)
SqlCommand commandRowCount = new SqlCommand("select count(*) from student",sourceConnection);
long countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar());
//使用SqlDataReader讀取源數(shù)據(jù)
SqlCommand commandSourceData = new SqlCommand("select * from student", sourceConnection);
SqlDataReader reader =commandSourceData.ExecuteReader();
//測(cè)試用,把數(shù)據(jù)從一個(gè)表批量插入到另一個(gè)表
//現(xiàn)實(shí)生活中肯定不會(huì)
using (SqlConnection destinationConnection =new SqlConnection(connectionString))
{
destinationConnection.Open();
//創(chuàng)建一個(gè)SQlBulkCopy對(duì)象
//指定目標(biāo)表名
//指定要插入的行數(shù)
//指定對(duì)應(yīng)的映射
using (SqlBulkCopy bulkCopy =new SqlBulkCopy(destinationConnection))
{
bulkCopy.DestinationTableName ="test";
bulkCopy.BatchSize = 1;
bulkCopy.ColumnMappings.Add("數(shù)據(jù)源列名","目標(biāo)列名");
try
{
bulkCopy.WriteToServer(reader);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
}
}
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C# 實(shí)現(xiàn)TXT文檔轉(zhuǎn)Table的示例代碼
- C# DataTable與Model互轉(zhuǎn)的示例代碼
- C# DataTable常見用法匯總
- C# ArrayList、HashSet、HashTable、List、Dictionary的區(qū)別詳解
- C#讀取Excel到DataTable的方法示例
- C#實(shí)現(xiàn)Json轉(zhuǎn)DataTable并導(dǎo)出Excel的方法示例
- C#使用Datatable導(dǎo)出Excel
- C#中DataTable 轉(zhuǎn)實(shí)體實(shí)例詳解
- C# 實(shí)現(xiàn)Table的Merge,Copy和Clone
相關(guān)文章
基于C#設(shè)計(jì)一個(gè)帶導(dǎo)航菜單的主界面
這篇文章主要為大家詳細(xì)介紹了如何基于C#設(shè)計(jì)一個(gè)帶導(dǎo)航菜單的主界面,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
使用GPS經(jīng)緯度定位附近地點(diǎn)(某一點(diǎn)范圍內(nèi)查詢)
目前的工作是需要手機(jī)查找附近N米以內(nèi)的商戶,致想法是已知一個(gè)中心點(diǎn),一個(gè)半徑,求圓包含于圓拋物線里所有的點(diǎn),經(jīng)緯度是一個(gè)點(diǎn),半徑是一個(gè)距離,不能直接加減,下面提供C#的解決方法2013-12-12
C#與C++?dll之間傳遞字符串string?wchar_t*?char*?IntPtr問(wèn)題
C#與C++?dll之間傳遞字符串string?wchar_t*?char*?IntPtr問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
C#基于正則表達(dá)式刪除字符串中數(shù)字或非數(shù)字的方法
這篇文章主要介紹了C#基于正則表達(dá)式刪除字符串中數(shù)字或非數(shù)字的方法,涉及C#針對(duì)數(shù)字的簡(jiǎn)單正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
基于c#用Socket做一個(gè)局域網(wǎng)聊天工具
目前基于Internet的即時(shí)聊天工具已經(jīng)做的非常完美,本文介紹了基于c#用Socket做一個(gè)局域網(wǎng)聊天工具,有需要的朋友可以看一下。2016-10-10
C# winfroms使用socket客戶端服務(wù)端的示例代碼
這篇文章主要為大家詳細(xì)介紹了C# winfroms使用socket客戶端服務(wù)端的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02

