說明:上傳控件沒有用ASP.NET自帶的FileUpload控件,用的第三方控件:Brettle.Web.NeatUpload.dll
步驟:
1.添加 Brettle.Web.NeatUpload.dll 引用
2.aspx:
<form id="form1" runat="server" enctype="multipart/form-data">
<div id="files" runat="server">
<asp:FileUpload ID="FileUpload1" runat="server" /><br /><br />
<Upload:InputFile ID="InputFile1" runat="server" />
<asp:Button ID="btnImport" runat="server" Text="導入" onclick="btnImport_Click" />
</div>
</form>
3.CS:
protected void btnImport_Click(object sender, EventArgs e)
{
String connectionString = "server=localhost;uid=sa;pwd=123456;database=UpgradeDB";//連接數據庫
string FileName = this.InputFile1.FileName;//獲取上傳文件的文件名,包括後綴
string filepath = Request.PhysicalPath;
filepath = filepath.Substring(0, filepath.LastIndexOf('\\'));
filepath = filepath + "\\up_file\\";
string SaveFileName = System.IO.Path.Combine(filepath, FileName);//合併兩個路徑爲上傳到服務器上的全路徑
InputFile1.MoveTo(SaveFileName, Brettle.Web.NeatUpload.MoveToOptions.Overwrite);//先將需要導入的文件上傳到服務器的某個文件夾中,因爲如果要直接讀取客戶端的路徑比較困難,我是上傳到項目的up_file文件夾裏
DataTable dt = ReadCsvFileToTable(true, ',', SaveFileName);//調用方法
if (dt.Rows.Count > 0)
{
this.files.InnerHtml = "";
int sta = 0;
for (int i = 0; i < dt.Rows.Count; i++)//循環獲取CSV文件的內容
{
string date = Convert.ToDateTime(dt.Rows[i][5].ToString()).ToString("yyyy-MM-dd");
string lastdate = Convert.ToDateTime(dt.Rows[i][6].ToString()).ToString("yyyy-MM-dd");
string state = dt.Rows[i][4].ToString();
if (state.Equals("已燒錄"))//這個是我的項目需要,文件中爲字符串,數據庫裏是一個int類型的狀態值,所以我需要轉換一下
{
sta = 2;
}
else {
sta = 1;
}
string emac = dt.Rows[i][3].ToString();
string sql = "";
if (!string.IsNullOrEmpty(emac))//無線MAC不爲空(如果你需要判斷這個字段,但是值又是可以爲空的話,就有必要判斷一下了,因爲如果數據只要超過1條並且這個字段的內容爲空的話,數據庫是不會再添加進去的)
{
//此SQL語句就是解決重複添加數據的問題,詳情見:http://blog.csdn.net/yxy353245805/article/details/7751796
sql = "if not exists(select * from ProductInfo where checksum(SN)=checksum('" + dt.Rows[i][1].ToString() + "'))"
+ "if not exists(select * from ProductInfo where checksum(MAC)=checksum('" + dt.Rows[i][2].ToString() + "'))"
+ "if not exists(select * from ProductInfo where checksum(EMAC)=checksum('" + dt.Rows[i][3].ToString() + "'))"
+ "insert into ProductInfo(WorkNo,SN,MAC,EMAC,time,lastupdatetime,state) "
+ "values('" + dt.Rows[i][0].ToString() + "','" + dt.Rows[i][1].ToString() + "','" + dt.Rows[i][2].ToString() + "','"
+ dt.Rows[i][3].ToString() + "','" + date + "','" + lastdate + "'," + sta + ")";
}
else {
sql = "if not exists(select * from ProductInfo where checksum(SN)=checksum('" + dt.Rows[i][1].ToString() + "'))"
+ "if not exists(select * from ProductInfo where checksum(MAC)=checksum('" + dt.Rows[i][2].ToString() + "'))"
//+ "if not exists(select * from ProductInfo where checksum(EMAC)=checksum('" + dt.Rows[i][3].ToString() + "'))"
+ "insert into ProductInfo(WorkNo,SN,MAC,EMAC,time,lastupdatetime,state) "
+ "values('" + dt.Rows[i][0].ToString() + "','" + dt.Rows[i][1].ToString() + "','" + dt.Rows[i][2].ToString() + "','"
+ dt.Rows[i][3].ToString() + "','" + date + "','" + lastdate + "'," + sta + ")";
}
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
SqlCommand command = new SqlCommand(sql, conn);
//command.ExecuteScalar();
command.ExecuteNonQuery();
conn.Close();
}
}
}
/// <summary>
/// 導入CSV文件方法
/// </summary>
/// <param name="HeadYes">是否有標題</param>
/// <param name="span">分隔符</param>
/// <param name="path"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public DataTable ReadCsvFileToTable(bool HeadYes, char span, string path)
{
//文件路徑和文件名
string files = path;
DataTable dt = new DataTable();
StreamReader fileReader = new StreamReader(files, Encoding.Default);
try
{
//是否爲第一行(如果HeadYes爲TRUE,則第一行爲標題行)
int lsi = 0;
//列之間的分隔符
char cv = span;
while (fileReader.EndOfStream == false)
{
string line = fileReader.ReadLine();
string[] y = line.Split(cv);
//第一行爲標題行
if (HeadYes == true)
{
//第一行
if (lsi == 0)
{
for (int i = 0; i < y.Length; i++)
{
dt.Columns.Add(y[i].Trim().ToString());
}
lsi++;
}
//從第二列開始爲數據列
else
{
DataRow dr = dt.NewRow();
for (int i = 0; i < y.Length; i++)
{
dr[i] = y[i].Trim();
}
dt.Rows.Add(dr);
}
}
//第一行不爲標題行
else
{
if (lsi == 0)
{
for (int i = 0; i < y.Length; i++)
{
dt.Columns.Add(i.ToString());
}
lsi++;
}
DataRow dr = dt.NewRow();
for (int i = 0; i < y.Length; i++)
{
dr[i] = y[i].Trim();
}
dt.Rows.Add(dr);
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
fileReader.Close();
fileReader.Dispose();
}
return dt;
}