c datatable导入mysql_《项目经验》–简单三层使用DataTable向数据库表批量导入数据—向SqlServer一张表中导入数据 | 学步园...
向數據庫的一張表中添加數據,可以采用單個添加,即一條數據、一條數據的添加;也可以采用批量導入,依次將好些條數據寫入數據庫的一張表中。文本借助實例《添加系列信息》講解一種向數據庫批量導入數據的方法。
1.界面設計
觀看一下添加系列信息部分的界面設計:
本文主要介紹批量導入系列信息的實現,單個添加的實現不在此文講解之列!
2.框架結構
此項目的實現,我采用簡單的三層,看一下項目框架
3.批量導入數據的實現
下面逐層介紹每層實現:
3.1 SqlHelper數據庫助手類中添加向數據庫表導入數據的方法(SqlHelper.cs)
#region 批量導入datatable
///
/// 批量導入datatable
///
/// 數據表
/// 數據表名
/// 列集合
public int InsertTable(DataTable dt, string TabelName, DataColumnCollection dtColum)
{
//打開數據庫
GetConn();
try
{
//聲明SqlBulkCopy ,using釋放非托管資源
using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn))
{
//一次批量的插入的數據量
//sqlBC.BatchSize = 1000;
//超時之前操作完成所允許的秒數,如果超時則事務不會提交 ,數據將回滾,所有已復制的行都會從目標表中移除
//sqlBC.BulkCopyTimeout = 60;
//設定 NotifyAfter 屬性,以便在每插入10000 條數據時,呼叫相應事件。
//sqlBC.NotifyAfter = 10000;
// sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
//設置要批量寫入的表
sqlBC.DestinationTableName = TabelName;
//自定義的datatable和數據庫的字段進行對應
for (int i = 0; i < dtColum.Count; i++)
{
sqlBC.ColumnMappings.Add(dtColum[i].ColumnName.ToString(), dtColum[i].ColumnName.ToString());
}
//批量寫入
sqlBC.WriteToServer(dt);
}
//導入成功,返回1
return 1;
}
catch
{
//導入失敗返回-1
return -1;
}
finally
{
//關閉數據庫
conn.Close();
}
}
#endregion
3.2.DAL層批量導入數據的代碼(DaoSeries.cs)
#region 批量導入系列信息
///
/// 批量導入系列信息
///
/// DataTable數據表-dt;
/// DataColumnCollection 列集合-dtColum
/// 整數:大于0代表導入成功;否則導入失敗
public int ImportDatatable(DataTable dt, DataColumnCollection dtColum)
{
//定義一個整型標記變量
int result;
//調用sqlHelper的"批量導入datatable表"的方法
result = sqlheler.InsertTable(dt, "T_SeriesInfo", dtColum);
//返回結果
return result;
}
#endregion
3.3.BLL層批量導入數據的代碼(MgrSeriesManager.cs)
#region 批量導入系列
///
/// 批量導入系列
///
/// 數據表
/// 數據列集合
/// 整數:大于0代表導入成功,否則導入失敗
public int ImportDatatable(DataTable dt, DataColumnCollection dtColum)
{
DaoSeries series=new DaoSeries();
return series.ImportDatatable(dt, dtColum);
}
#endregion
3.4.界面層構造DataTable數據,向BLL層傳遞(FrmSeriesManager.aspx,FrmSeriesManager.aspx.cs)
這里構造DataTable數據,我是采用從界面上傳Excel,然后從Excel獲取輸入然后存入DataTable的
3.4.1 從界面傳入Excel,調用BLL層Excel轉換成DataTable的方法實現
#region 批量導入系列
///
/// 批量導入系列
///
protected void btnImportSeries_Click(object sender, EventArgs e)
{
//BLL層,添加系列信息類
MgrSeriesManager series = new MgrSeriesManager();
//BLL層把excel轉化為datatable的方法
MgrCreateExcelData createExcelData = new MgrCreateExcelData();
//獲取上傳文件地址
string url = fupImprotSeries.PostedFile.FileName.ToString();
if (url == "")
{
//數據源為空,彈出提示:請選擇Excel文件!
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");
return;
}
string urlLocation = url.Substring(url.LastIndexOf("\\") + 1);//獲取文件名
DataTable dt;
//在系統中建文件夾up,并將excel文件另存
this.fupImprotSeries.SaveAs(Server.MapPath("~\\up") + "\\" + urlLocation);//記錄文件名到服務器相對應的文件夾中
// Response.Write(urlLocation);
//獲得文件路徑
string strpath = Server.MapPath("~\\up") + "\\" + urlLocation;
//string strpath = "c:\\abc.xls";
// Response.Write(strpath);
//把excel轉換為datatable
dt = createExcelData.CreateExcelDataSource(strpath);
DataColumnCollection dcc = dt.Columns;
//導入數據庫
int i = series.ImportDatatable(dt, dcc);
if (i > 0)
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");
}
else
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "");
}
}
#endregion
3.4.2 BLL層Excel轉換成DataTable的類(MgrCreateExcelData.cs)
/*************************************************
作者:jql
小組:一中考核系統
說明:把excel轉化為datatable
創建日期:2012年11月25日14:17:06
版本號:v1.0
版權所有:信息技術提高班
**********************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//引用各命名空間
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace BLL
{
public class MgrCreateExcelData
{
public MgrCreateExcelData()
{
}
///
/// 傳入excel路徑,轉換為datatable
///
///
///
public DataTable CreateExcelDataSource(string url)
{
DataTable dt = null;
// string connetionStr = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source="
// +url + ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";
//獲得excel數據
string connetionStr = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + url + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
string strSql = "select * from [Sheet1$]";
OleDbConnection oleConn = new OleDbConnection(connetionStr);
OleDbDataAdapter oleAdapter = new OleDbDataAdapter(strSql, connetionStr);
try
{
//把excel數據填充給datatable
dt = new DataTable();
oleAdapter.Fill(dt);
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
oleAdapter.Dispose();
oleConn.Close();
oleConn.Dispose();
}
}
}
}
至此向數據庫批量導入數據就實現了,如果你想對要導入數據庫的數據做合法性判斷,執行Excel轉換成Datatable時,自己加些判斷處理就行了!
總結
以上是生活随笔為你收集整理的c datatable导入mysql_《项目经验》–简单三层使用DataTable向数据库表批量导入数据—向SqlServer一张表中导入数据 | 学步园...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《暗黑地牢2》Steam页面上线:Epi
- 下一篇: 不到1500亿元 美国资本要私有化日本百