天天看点

将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