天天看點

将txt檔案和excel檔案導入SQL2000資料庫

在做一些web資料庫管理系統的時候經常要實作将帳戶批量注冊的功能,今天就來講講如何在C#-web項目中将txt檔案和excel檔案導入SQL2000資料庫。

1.資料庫準備

在SQL2000資料庫的執行個體資料庫pubs中建立一個資料表txtInsert,字段很簡單:id,name兩個。

2.txt文本檔案導入

對于資料檔案導入與導出SQL2000提供了BULK INSERT和BCP語句,在這裡可以使用BULK INSERT指令實作。假設在c盤上有一個文本檔案stu.txt内容為:

    1,tom

    2,jack

    3,jhon

    ......

實作導入的C#代碼如下:

protected System.Web.UI.HtmlControls.HtmlInputFile fName; 

protected System.Web.UI.WebControls.Button BtnInsert;

//上面兩個控件自己添加

将txt檔案和excel檔案導入SQL2000資料庫

private   void  BtnInsert_Click( object  sender, System.EventArgs e)

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{

将txt檔案和excel檔案導入SQL2000資料庫

                string fPath=this.fName.PostedFile.FileName;//獲得要導入的文本檔案                  

将txt檔案和excel檔案導入SQL2000資料庫

            string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//獲得檔案的擴充名            

将txt檔案和excel檔案導入SQL2000資料庫

            SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//資料庫連接配接對象

将txt檔案和excel檔案導入SQL2000資料庫

            con.Open();

将txt檔案和excel檔案導入SQL2000資料庫

            try

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{                    

将txt檔案和excel檔案導入SQL2000資料庫

                    SqlCommand com=new SqlCommand("BULK INSERT pubs.dbo.txtInsert FROM '"+fPath+"' WITH  (FIELDTERMINATOR = ',',ROWTERMINATOR= '\n')",con);

将txt檔案和excel檔案導入SQL2000資料庫

                       //其中的FIELDTERMINATOR=','指明字段間所使用的分隔符為逗号

将txt檔案和excel檔案導入SQL2000資料庫

                       //其中ROWTERMINATOR= '\n'指明記錄間所使用的分隔符為回車

将txt檔案和excel檔案導入SQL2000資料庫

                    com.ExecuteNonQuery();

将txt檔案和excel檔案導入SQL2000資料庫

                    Response.Write("<script language=javascript>alert('資料導入成功!')</script>");                    

将txt檔案和excel檔案導入SQL2000資料庫

                }

将txt檔案和excel檔案導入SQL2000資料庫

             catch (SqlException SQLexc)

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{

将txt檔案和excel檔案導入SQL2000資料庫

                    Response.Write("導入資料庫時出錯:" + SQLexc.ToString());

将txt檔案和excel檔案導入SQL2000資料庫

                }

将txt檔案和excel檔案導入SQL2000資料庫

con.Close();

将txt檔案和excel檔案導入SQL2000資料庫

}

好了,這個txt檔案的導入相對簡單,在資料庫中我也沒有設定主鍵,我在裡面也沒有加出錯復原事務操作,在下面的excel檔案的導入中介紹。

3.excel檔案的導入

在c盤裡建立一個stu.xls檔案,在sheet1工作表中有兩列資料如下:

     編号  姓名

     1        tom

     2        jack

     3        john

     ......

注意,工作表的第一行是作為标題行的不會被插入到資料庫中,真正導入從第二行開始。

為了示範事物出錯復原,在這裡将txtInsert資料庫表中的id字段設定為主鍵。實作的C#代碼如下:

将txt檔案和excel檔案導入SQL2000資料庫

private   void  BtnInsert_Click( object  sender, System.EventArgs e)

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{

将txt檔案和excel檔案導入SQL2000資料庫

   string fPath=this.fName.PostedFile.FileName;//獲得要導入的文本檔案     

将txt檔案和excel檔案導入SQL2000資料庫

   string extName=fPath.Substring(fPath.LastIndexOf(".")+1);//獲得檔案的擴充名   

将txt檔案和excel檔案導入SQL2000資料庫

   SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//資料庫連接配接對象

将txt檔案和excel檔案導入SQL2000資料庫

   con.Open();   

将txt檔案和excel檔案導入SQL2000資料庫

    //注意下面的連接配接字元串,是它起到了導入的作用

将txt檔案和excel檔案導入SQL2000資料庫

    SqlCommand excelCmd=new SqlCommand("insert into txtInsert select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE="+fPath+"',Sheet1$)",con);

将txt檔案和excel檔案導入SQL2000資料庫

    SqlTransaction myTran=con.BeginTransaction();//開始一個事務操作

将txt檔案和excel檔案導入SQL2000資料庫

    excelCmd.Transaction=myTran;

将txt檔案和excel檔案導入SQL2000資料庫

    try

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{       

将txt檔案和excel檔案導入SQL2000資料庫

     excelCmd.ExecuteNonQuery();

将txt檔案和excel檔案導入SQL2000資料庫

     myTran.Commit();//送出事務       

将txt檔案和excel檔案導入SQL2000資料庫

     Response.Write("<script language=javascript>alert('資料導入成功!')</script>");

将txt檔案和excel檔案導入SQL2000資料庫

    }

将txt檔案和excel檔案導入SQL2000資料庫

    catch (SqlException err)

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{       

将txt檔案和excel檔案導入SQL2000資料庫

     myTran.Rollback(); //出錯復原事務操作

将txt檔案和excel檔案導入SQL2000資料庫

     //以下三行是去掉資料庫出錯資訊中的非法字元單引号、回車和換行符,否則在使用時javascript代碼将有文法錯誤

将txt檔案和excel檔案導入SQL2000資料庫

     //因為js的編碼和c#的編碼不同

将txt檔案和excel檔案導入SQL2000資料庫

     string errString=err.Message.Replace("'"," ");

将txt檔案和excel檔案導入SQL2000資料庫

     errString=errString.Replace(Convert.ToChar(13).ToString(),"");

将txt檔案和excel檔案導入SQL2000資料庫

     errString=errString.Replace(Convert.ToChar(10).ToString(),"");

将txt檔案和excel檔案導入SQL2000資料庫

     //顯示出錯資訊框

将txt檔案和excel檔案導入SQL2000資料庫

     Response.Write("<script language=javascript>alert('導入資料庫時出錯!詳細資訊:"+errString+"')</script>");         

将txt檔案和excel檔案導入SQL2000資料庫

    }   

将txt檔案和excel檔案導入SQL2000資料庫

   con.Close();

将txt檔案和excel檔案導入SQL2000資料庫

  }

将txt檔案和excel檔案導入SQL2000資料庫

這裡“顯示出錯資訊框”開始我沒有田間那三行代碼,結果搞了半天,最後還是在html檔案中發現javascript代碼部分出現了分行,老是提示“未結束的字元串常量”,是以導緻不能打開資訊框,郁悶死我了,花了好多時間。

4.将excel中部分列導入資料庫的方法

上面講了關于将整個excel檔案導入資料庫的方法,那麼在實際項目中遇到将excel檔案中若幹列導入資料庫怎麼辦的呢,原理差不多,我就将代碼直接給出了:

                    string   fPath=this.fName.PostedFile.FileName;//獲得要導入的文本檔案     

                    string   extName=fPath.Substring(fPath.LastIndexOf(".")+1);//獲得檔案的擴充名   

                   SqlConnection con=new SqlConnection("server=.;database=pubs;uid=sa;pwd=;");//資料庫連接配接對象

                   con.Open();

将txt檔案和excel檔案導入SQL2000資料庫

                   string  mystring = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = ' " + fPath + " ';Extended Properties=Excel 8.0 " ;

将txt檔案和excel檔案導入SQL2000資料庫

                OleDbConnection cnnxls  =   new  OleDbConnection (mystring);

将txt檔案和excel檔案導入SQL2000資料庫

                OleDbDataAdapter myDa  = new  OleDbDataAdapter( " select * from [Sheet1$] " ,cnnxls);

将txt檔案和excel檔案導入SQL2000資料庫

                DataSet myDs  = new  DataSet();

将txt檔案和excel檔案導入SQL2000資料庫

                myDa.Fill(myDs);

将txt檔案和excel檔案導入SQL2000資料庫

                 if (myDs.Tables[ 0 ].Rows.Count  >   0 )

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{

将txt檔案和excel檔案導入SQL2000資料庫

                    string strSql = "";

将txt檔案和excel檔案導入SQL2000資料庫

                    string CnnString="Provider=SQLOLEDB;database=pubs;server=.;uid=sa;pwd=";

将txt檔案和excel檔案導入SQL2000資料庫

                    OleDbConnection conn =new OleDbConnection(CnnString);

将txt檔案和excel檔案導入SQL2000資料庫

                    conn.Open ();

将txt檔案和excel檔案導入SQL2000資料庫

                    OleDbCommand myCmd =null;                    

将txt檔案和excel檔案導入SQL2000資料庫

                    for(int i=0; i<myDs.Tables[0].Rows.Count;i++)//第一個工作表中行數,不包括第一行,

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{

将txt檔案和excel檔案導入SQL2000資料庫

                        strSql="insert into txtInsert(id,name) values (";

将txt檔案和excel檔案導入SQL2000資料庫

                        strSql += myDs.Tables[0].Rows[i].ItemArray[0].ToString() + ", '";

将txt檔案和excel檔案導入SQL2000資料庫

                        strSql += myDs.Tables[0].Rows[i].ItemArray[1].ToString() + "')";

将txt檔案和excel檔案導入SQL2000資料庫

                        myCmd=new OleDbCommand(strSql,conn);

将txt檔案和excel檔案導入SQL2000資料庫

try

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{                            

将txt檔案和excel檔案導入SQL2000資料庫

                            myCmd.ExecuteNonQuery();

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

                            Response.Write("<script language=javascript>alert('資料導入成功!')</script>");

将txt檔案和excel檔案導入SQL2000資料庫

                        }

将txt檔案和excel檔案導入SQL2000資料庫

                        catch (OleDbException err)

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

{                            

将txt檔案和excel檔案導入SQL2000資料庫
将txt檔案和excel檔案導入SQL2000資料庫

                            Response.Write("導入資料庫時出錯:" +err.ToString());

将txt檔案和excel檔案導入SQL2000資料庫

                            break;

将txt檔案和excel檔案導入SQL2000資料庫

                        }

将txt檔案和excel檔案導入SQL2000資料庫

                    }

将txt檔案和excel檔案導入SQL2000資料庫

                    conn.Close(); 其他部分代碼自己加吧,這裡就是出錯失誤復原有點不好處理,請高手指教!!

轉載于:https://www.cnblogs.com/mc-dragon/archive/2007/01/18/624238.html