现在我想在页面上做一个按钮,当用户点击该按钮时,执行:可以把本地的excel导入到我们服务器上的一个临时表中,然后我再把临时表中的记录更新到另外一个表中,但目前的问题是:我不知道怎么写相关代码,把excel中的数据导入到数据库中的临时表中,不知道有没有解决办法,请各位高手指教,万分感激!!
最好有相关的导入代码,不胜感激!!在线等。。

解决方案 »

  1.   

    SQL SERVER 与ACCESS、EXCEL的数据转换 熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQL SERVER、ACCESS、EXCEL数据转换,详细说明如下: 一、SQL SERVER 和ACCESS的数据导入导出 常规的数据导入导出: 使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤: 1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation 
    2Services(数据转换服务),然后选择  czdImport Data(导入数据)。 
    3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。 
    4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。 
    5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。 
    6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。下一步,完成。 Transact-SQL语句进行导入导出: 1.在SQL SERVER里查询access数据: 
    -- ====================================================== 
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\DB.mdb";User ID=Admin;Password=')...表名 
    ------------------------------------------------------------------------------------------------- 
    2.将access导入SQL server 
    -- ====================================================== 
    在SQL SERVER 里运行: 
    SELECT * 
    INTO newtable 
    FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0', 
          'Data Source="c:\DB.mdb";User ID=Admin;Password=' )...表名 
    ------------------------------------------------------------------------------------------------- 
    3.将SQL SERVER表里的数据插入到Access表中 
    -- ====================================================== 
    在SQL SERVER 里运行: 
    insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source=" c:\DB.mdb";User ID=Admin;Password=')...表名 
    (列名1,列名2) 
    select 列名1,列名2  from  sql表 
    实例: 
    insert into  OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
      'C:\db.mdb';'admin';'', Test) 
    select id,name from Test 
    INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\trade.mdb'; 'admin'; '', 表名) 
    SELECT * 
    FROM sqltablename 
    ------------------------------------------------------------------------------------------------- 二、SQL SERVER 和EXCEL的数据导入导出 
    1、在SQL SERVER里查询Excel数据: 
    -- ====================================================== 
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 
    下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。 
    SELECT * 
    FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 
    ------------------------------------------------------------------------------------------------- 2、将Excel的数据导入SQL server : 
    -- ====================================================== 
    SELECT * into newtable 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 
    实例: 
    SELECT * into newtable 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 
    ------------------------------------------------------------------------------------------------- 3、将SQL SERVER中查询到的数据导成一个Excel文件 
    -- ====================================================== 
    T-SQL代码: 
    EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""' 
    参数:S 是SQL服务器名;U是用户;P是密码 
    说明:还可以导出文本文件等多种格式 
    实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"' 
    EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword' 
    在VB6中应用ADO导出EXCEL文件代码: 
    Dim cn  As New ADODB.Connection 
    cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;" 
    cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'" 
    ------------------------------------------------------------------------------------------------ 4、在SQL SERVER里往Excel插入数据: 
    -- ====================================================== 
    insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3) T-SQL代码: 
    INSERT INTO  
    OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
    'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  
    (bestand, produkt) VALUES (20, 'Test')  
    ------------------------------------------------------------------------------------------------- 总结:利用以上语句,我们可以方便地将SQL SERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!
      

  2.   

    本地的excel导入到我们服务器上的一个临时表中这个是关键啊
      

  3.   

    直接在本地导入到远程服务器上就好处理一下
    exec sp_addlinkedserver  'SQL_server', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin  'SQL_server', 'false ',null, '用户名', '密码 ' 先创建一台名为SQL_server的链接服务器
    然后SELECT * into SQL_server.dbo.newtable 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source="c:\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 
    或者select * into openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source="c:\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 
    仅做参看,没测试
      

  4.   


    STRING SQL="SELECT * into #TABLE 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source="c:\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions" STRING SQL2="INSERT INTO TABLE (A,B,C,D) SELECT A,B,C,D FROM #TABLE "
      

  5.   


    大哥,他是想把本地的导入到远程服务器,也就是说,这sql语句是在远处服务器上执行的,而你这个excel的路径是本地的,肯定不能实现的
      

  6.   

       会从 Ecxel 中读取数据库吗, 那就直接读取出来,然后写 向 sql 插入 的语句不就行了
      

  7.   

    逻辑就是
    先上传excel到服务器,获取excel中的数据,验证。
    检查通过插入表中。你光一个按钮不够,加上上传控件。
    这种需求也常见吧
      

  8.   

    public   class   excel   :   System.Web.UI.Page   
      {   
      string   strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=d:\\工料机汇总表(石油).xls;Extended   Properties='Excel   8.0;HDR=NO'";   
      //OleDbCommand   command;   
      OleDbDataAdapter   ada;   
      DataSet   ds=new   DataSet();   
      protected   System.Web.UI.WebControls.DataGrid   dg;   
      OleDbConnection   connection;   
        
      private   void   Page_Load(object   sender,   System.EventArgs   e)   
      {   
      //   在此处放置用户代码以初始化页面   
      if(!Page.IsPostBack)   
      {   
      connection=new   OleDbConnection(strConn);   
      ada=new   OleDbDataAdapter("SELECT   *   FROM   [sheet1$]",connection);   
      ada.Fill(ds,"all");   
        
      //ds.Tables["all"].Rows[0].Delete();   
      //ds.Tables["all"].Rows[1].Delete();   
      //ds.Tables["all"].Rows[2].Delete();   
      //ds.Tables["all"].Rows[3].Delete();   
      //ds.Tables["all"].Rows[4].Delete();   
      //ds.Tables["all"].Columns.RemoveAt(0);   
      //dg.DataSource=ds.Tables["all"].DefaultView;   
      //dg.DataBind();   
        
      DataTable   dt=ds.Tables["all"];   
      //dt.Rows[0].Delete();   
      //dt.Rows[1].Delete();   
      //dt.Rows[2].Delete();   
      //dt.Rows[3].Delete();   
      /*   
      dt.Columns.RemoveAt(0);   
      dt.Rows.RemoveAt(0);   
      */   
      dt.Rows.RemoveAt(1);   
      dt.Rows.RemoveAt(1);   
      dt.Rows.RemoveAt(1);   
        
      //Response.Write("<table   border='1'>");   
      /*   
      for(int   i=0;i<dv.r;i++)   
      {   
      Response.Write("<tr>");   
      object[]   o=ds.Tables["all"].Rows[i].ItemArray;   
      for(int   j=0;j<ds.Tables["all"].Columns.Count;j++)   
      {   
      Response.Write("<td>");   
      Response.Write(ds.Tables["all"].Columns[j].DataType.ToString());   
      Response.Write("</td>");   
      }   
      Response.Write("</tr>");   
      }   
      */   
      //Response.Write("</table>");   
      Response.Write("<table   border='1'   bordercolorlight='#000080'   bordercolordark='#000080'   align='center'>");   
      for(int   i=0;i<dt.Rows.Count;i++)   
      {   
      Response.Write("<tr>");   
      object[]   o=dt.Rows[i].ItemArray;   
      for(int   j=0;j<dt.Columns.Count;j++)   
      {   
      Response.Write("<td>");   
      if(!o[j].ToString().Equals(""))   
      {   
      Response.Write(o[j].ToString());   
      }   
      else   
      {   
      Response.Write("&nbsp;");//<font   color='red'>(i="+i+",j="+j+")</font>   
      }   
      Response.Write("</td>");   
      }   
      Response.Write("</tr>");   
      }   
      Response.Write("</table>");   
      }   
      }   
        
      #region   Web   Form   Designer   generated   code   
      override   protected   void   OnInit(EventArgs   e)   
      {   
      //   
      //   CODEGEN:该调用是   ASP.NET   Web   窗体设计器所必需的。   
      //   
      InitializeComponent();   
      base.OnInit(e);   
      }   
        
      ///   <summary>   
      ///   设计器支持所需的方法   -   不要使用代码编辑器修改   
      ///   此方法的内容。   
      ///   </summary>   
      private   void   InitializeComponent()   
      {           
      this.Load   +=   new   System.EventHandler(this.Page_Load);   
        
      }   
      #endregion   
        
      }   
      }   
      ========================================   
      我以前的代码
      

  9.   

    我倾向于把excel文件另存为.csv文件,然后直接分析.csv文件的内容.
    当然.net提供了相关的操作.但是cxcel的里面的特殊格式往往会造成有些东西导入不进.
    所以,宁愿选择上面说的原始方法.
      

  10.   

    public static DataTable ExcelDataSource(string filepath, string sheetname)
            {
                try
                {
               
                    string strConn;
                    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";
                    OleDbConnection conn = new OleDbConnection(strConn);
                    if (sheetname.IndexOf("$") != sheetname.Length-1)
                    {
                        sheetname += "$";
                    }
                    OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetname + "]", strConn);
                    DataSet ds = new DataSet();
                    oada.Fill(ds);
                    return ds.Tables[0];
                }
                catch (System.Exception e)
                {
                    return null;
                }
            }楼主试试这个!!filepath 这个变量用来存储本地excel的路径的。sheetname是excel中有记录的工作表的名字。
    filepath的值可以用string filepath = FileUpload1.PostedFile.FileName;来获得。
      

  11.   

    excel中的数据进入DataTable后,可以将DataTable与数据控件绑定。如datalist,gridview等,然后在插入数据库。