在日常的項目中,Excel,Word,txt等格式的數據導入到數據庫中是很常見的,我在這裡做一下總結
這裡將分為Asp.net導入Sql Server,Oracle數據庫和WinForm導入Sql Server,Oracle數據庫。
這裡將的數據庫數據庫導入導出,其實對Sql Server 和Oracle都是通用的
如果使用ADO.Net連接Oracle數據庫,需要在引用裡添加“System.Data.OracleClient ”,其他方面與連接Sql Server數據庫是一樣的
SqlConnection cn = new SqlConnection();
OracleConnection oraleCn = new OracleConnection();
如果使用諸如Ibatis等持久層框架的話,唯一的區別就是在數據庫連接語句上的差別而已。下面是兩個例子
Oracle:Data Source=192.168.0.11/Contact;User ID=system;Password=ss;Unicode=True
Sql Server:Data Source=Contact;Server=localhost;uid=sa;pwd=ss
接著上一篇繼續。
2,使用對象集合導出Excel
先給出在網上下載的一個ExcelHelper的類
其基本思想就是先根據反射從傳遞進來的屬性名信息得到要顯示的屬性
然後根據屬性取它的值
using System;
using System.Collections.Generic;
using System.Web;
using System.Reflection;
using System.Text;
namespace Common.Classes
{
public class ExcelHelper
{ /**/
/// <summary>
/// 將一組對象導出成EXCEL
/// </summary>
/// <typeparam name="T">要導出對象的類型</typeparam>
/// <param name="objList">一組對象</param>
/// <param name="FileName">導出後的文件名</param>
/// <param name="columnInfo">列名信息</param>
public static void ExExcel<T>(List<T> objList, string FileName, Dictionary<string, string> columnInfo, string FileType)
{
ExExcel(objList, FileName, columnInfo, FileType, null);
}
/**/
/// <summary>
/// 將一組對象導出成EXCEL
/// </summary>
/// <typeparam name="T">要導出對象的類型</typeparam>
/// <param name="objList">一組對象</param>
/// <param name="FileName">導出後的文件名</param>
/// <param name="columnInfo">列名信息</param>
/// <param name="other">追加其他內容</param>
public static void ExExcel<T>(List<T> objList, string FileName, Dictionary<string, string> columnInfo, string FileType,string other )
{
if(columnInfo.Count == 0)
{
return;
}
if(objList.Count == 0)
{
return;
}
//生成EXCEL的HTML
string excelStr = "";
Type myType = objList[0].GetType();
//根據反射從傳遞進來的屬性名信息得到要顯示的屬性
List<PropertyInfo> myPro = new List<PropertyInfo>();
foreach(string cName in columnInfo.Keys)
{
PropertyInfo p = myType.GetProperty(cName);
if(p != null)
{
myPro.Add(p);
excelStr += columnInfo[cName] + "\t";
}
}
//如果沒有找到可用的屬性則結束
if(myPro.Count == 0)
{
return;
}
excelStr += "\n";
foreach(T obj in objList)
{
foreach(PropertyInfo p in myPro)
{
//此處是為了對時間格式進行處理
if(p.Name == "CBirthday")
{
string str = p.GetValue(obj, null).ToString();
string strs = (str == "0001-1-1 0:00:00") ? "" : str;
if(strs == "")
{
excelStr += strs + "\t";
}
else
{
excelStr += Convert.ToDateTime(strs).ToShortDateString() + "\t";
}
}
else
{
excelStr += p.GetValue(obj, null) + "\t";
}
}
excelStr += "\n";
}
if(!string.IsNullOrEmpty(other))
{
excelStr += other;
}
//輸出EXCEL
HttpResponse rs = System.Web.HttpContext.Current.Response;
rs.Clear();
rs.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
rs.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(FileName, Encoding.UTF8));
rs.ContentType = FileType;
rs.Write(excelStr);
rs.End();
}
}
}
數據庫中默認的時間是“0001-1-1 0:00:00”,這個在界面上顯示的話肯定不好看,在程序中為了適應具體情況,因此,我對“CBirthday”這一列進行了簡單的處理。
接下來看一下調用方法
public class ContactPersonExport
{
public string CPName{get;set;}
public string CPSex{get;set;}
public string CPBirthday{get;set;}
}
聯系人類。
然後在方法裡調用就可以了,contactList 集合的具體值,就靠大家自己去寫了
List<ContactPersonExportDomain> contactList = (List<ContactPersonExportDomain>)Helper.ContactExport().ExportDataIntoExcel();
Dictionary<string, string> columnInfo = new Dictionary<string, string>();
columnInfo.Add("CPName", "聯系人姓名");
columnInfo.Add("CPSex", "性別");
columnInfo.Add("CPBirthday", "生日");
string FileName = "test.xls";
string FileType = "application/ms-excel" //Excel的MIME類型
ExcelHelper.ExExcel<ContactPersonExportDomain>(contactList, FileName, columnInfo, FileType);