zoukankan      html  css  js  c++  java
  • SQL 将txt文件导入sql数据库

    就一句sql代码搞定,导入sql2000的代码。
    BULK INSERT
    表名 FROM 'F:\你的文本文件.txt' WITH  ( FIELDTERMINATOR ='以什么符号分割数据', ROWTERMINATOR= '以什么符号加\n结尾')--\n是回车的意思,就是回车前面是什么符号,如果没符号直接单引号\n
    例如:BULK INSERT bb FROM 'F:\2008-02-18.txt' WITH  ( FIELDTERMINATOR =',', ROWTERMINATOR= ',\n')
    bb
    是表名,f盘中的F:\2008-02-18.txt文件,  FIELDTERMINATOR =','每个数据是以逗号分隔的,ROWTERMINATOR= ',\n'每行数据以逗号回车结尾。

    我导入过很多次。

     

     

     

     

    使用BULK INSERT
    用法如下:

    stu.txt 结构
    1,Jim
    2,Kate
    3,Tom
    ...

    BULK INSERT dbo.TABLE1
    FROM 'd:\stu.txt'
    WITH (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '\n'
    )

    查看table1里的数据

    select * from table1

    ok了。

     

     

    在做一些web数据库管理系统的时候经常要实现将帐户批量注册的功能,今天就来讲讲如何在C#-web项目中将txt文件和excel文件导入 SQL2000数据库。
    1.
    数据库准备
    SQL2000数据库的实例数据库pubs中建立一个数据表txtInsert,字段很简 单:idname两个。
    2.txt
    文本文件导入
    对于数据文件导入与导出SQL2000提供了BULK INSERTBCP语句,在这里可以使用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;
    //
    上面两个控件自己添加

     

    代码

    private void BtnInsert_Click(object sender, System.EventArgs e)
      {
                    
    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();
                
    try
          {                    
                        SqlCommand com=
    new SqlCommand("BULK INSERT pubs.dbo.txtInsert FROM '"+fPath+"' WITH  (FIELDTERMINATOR = ',',ROWTERMINATOR= '\n')",con);
                           
    //其中的 FIELDTERMINATOR=','指明字段间所使用的分隔符为逗号
                           //
    其中 ROWTERMINATOR= '\n'指明记录间所使用的分隔符为回车
                        com.ExecuteNonQuery();
                        Response.Write(
    "<script language=javascript& gt;alert('数据导入成功!')</script>");                    
                    }
                 
    catch (SqlException SQLexc)
                    {
                        Response.Write(
    "导入数据库时出错:" + SQLexc.ToString());
                    }
    con.Close();
    }

    好了,这个txt文件的导入相对简单,在数据库中我也没有设置主键,我在里面也没有加出错回滚事务操作,在下面的excel文件的导入中介绍。
    3.excel
    文件的导入
    c盘里建立一个stu.xls文件,在sheet1工作表中有两列数据如下:
        
    编号  姓名
         1        tom
         2        jack
         3        john
         ......
    意,工作表的第一行是作为标题行的不会被插入到数据库中,真正导入从第二行开始。
    为了演示事物出错回滚,在这里将txtInsert数据库表中的 id字段设置为主键。实现的C#代码如下:

    代码

    private void BtnInsert_Click(object sender, System.EventArgs e)
      {
       
    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();   
        
    //注意下面的连接字符串,是它起到了导入的作用
        SqlCommand excelCmd=new SqlCommand("insert into txtInsert select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE="+fPath+"',Sheet1$)",con);
        SqlTransaction myTran=con.BeginTransaction();
    //开始一个事务操作
        excelCmd.Transaction=myTran;
        
    try
        {       
         excelCmd.ExecuteNonQuery();
         myTran.Commit();
    //提交事务       
         Response.Write("<script language=javascript& gt;alert('数据导入成功!')</script>");
        }
        
    catch (SqlException err)
        {       
         myTran.Rollback(); 
    //出错回滚事务操作
         //
    以下三行是去掉数据库出错信息中的非法字符单引号、回车和换行符,否则在使用时 javascript代码将有语法错误
         //
    因为js的编码和c#的编码不同
         string errString=err.Message.Replace("'"," ");
         errString=errString.Replace(Convert.ToChar(
    13).ToString(),"");
         errString=errString.Replace(Convert.ToChar(
    10).ToString(),"");
         
    //显示出错信息框
         Response.Write("<script language=javascript& gt;alert('导入数据库时出错!详细信息:"+errString+"')</script>");         
        }   
       con.Close();
      }

    这里显示出错信息框开始我没有田间那三行代码,结果搞了半天,最后还是在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();                
                       
    string mystring="Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '"+fPath+"';Extended Properties=Excel 8.0";
                    OleDbConnection cnnxls = 
    new OleDbConnection (mystring);
                    OleDbDataAdapter myDa =
    new OleDbDataAdapter("select * from [Sheet1$]",cnnxls);
                    DataSet myDs =
    new DataSet();
                    myDa.Fill(myDs);
                    
    if(myDs.Tables[0].Rows.Count > 0)
                    {
                        
    string strSql = "";
                        
    string CnnString="Provider=SQLOLEDB;database=pubs;server=.;uid=sa;pwd=";
                        OleDbConnection conn =
    new OleDbConnection(CnnString);
                        conn.Open ();
                        OleDbCommand myCmd =
    null;                    
                        
    for(int i=0; i<myDs.Tables[0].Rows.Count;i++)//第一个工作表中行数,不包括第一行,
                        {
                            strSql=
    "insert into txtInsert(id,name) values (";
                            strSql += myDs.Tables[
    0].Rows[i].ItemArray[0].ToString() + ", '";
                            strSql += myDs.Tables[
    0].Rows[i].ItemArray[1].ToString() + "')";
                            myCmd=
    new OleDbCommand(strSql,conn);
                            
    try
                            {                            
                                myCmd.ExecuteNonQuery();                                                        
                                Response.Write(
    "<script language=javascript& gt;alert('数据导入成功!')</script>");
                            }
                            
    catch (OleDbException err)
                            {                                                       
                                Response.Write(
    "导入数据库时出错:" +err.ToString());
                                
    break;
                            }
                        }
                        conn.Close();

     

     

  • 相关阅读:
    英语语法
    elk笔记2.0
    zabbix4.0-centos6 报错坑,是因为有3.0的包
    jenkins 用户授权
    python随记
    jenkins
    zabbix3.0、4.0 agent安装配置
    常用
    document.createElement()方法
    581. Shortest Unsorted Continuous Subarray(LeetCode)
  • 原文地址:https://www.cnblogs.com/zhc088/p/2216543.html
Copyright © 2011-2022 走看看