sql server中有数据库导入导出工具,可以做这个问题。

解决方案 »

  1.   

    对应的用户分散在全国,数据需要各地的人通过Web页选择原始文件后导入。所以想跟GGJJ们请教Web下实现这个的方法
      

  2.   

    将Excel表格作为数据源,用OLEDB连接,把取出来的数据放入DataSet,然后再把DataSet里的数据插入到SQL中就OK了。
      

  3.   

    楼上说的办法可以,不过有点累,效率也不高
    如果数据源文件格式可以统一成标准倒入格式
    可以考虑用cmd直接导入
      

  4.   

    http://search.csdn.net/Expert/topic/490/490033.xml?temp=.510586
    http://search.csdn.net/Expert/topic/952/952681.xml?temp=.6363031
      

  5.   

    很簡單﹐只要將EXCEL作為數據源即可。
    string conn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+m_sCurExcelDir+";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";string strsql = "Select * From [Sheet1$]";m_sCurExcelDir為你的EXCEL文件﹐其它的寫法完全一樣。
      

  6.   

    客户从网页上选择做好的Excel表,将数据导入规定的SQL表中。下面是我参照找到的例子作的。
    private DataSet GetOleData(string FileAddr)
      {
       OleDbConnection objConn = null;
       DataSet ds = new DataSet();   string strConn="Provider=Microsoft.Jet.OleDB.4.0;" + "Data Source=" + FileAddr + ";Extended Properties=Excel 8.0;";
       objConn=new OleDbConnection(strConn);
       objConn.Open();   
       string strSql = "select * from [Sheet1$A1:F2]";
       OleDbCommand objCmd = new OleDbCommand(strSql,objConn);
       OleDbDataAdapter sqlada = new OleDbDataAdapter();
       sqlada.SelectCommand = objCmd;
       sqlada.Fill(ds,"MyRecords");
       objConn.Close();
         
       return ds;
      }我在Excel里面预先输入了两行数据,可是查看ds.Tables[0].Rows.Count一直是1条。而且数值都是F1、F2这样的。请大家指教一二。万分感谢!
      

  7.   

    从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:/*===================================================================*/
    --如果接受数据导入的表已经存在
    insert  into  表  select  *  from  
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0’
    ,'Excel  5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)--如果导入数据并生成表
    select  *  into  表  from  
    OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
    ,’Excel  5.0;HDR=YES;DATABASE=c:\test.xls’,sheet1$)insert into Student select * from  
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=E:\w.xls',sheet1$)select * into Student from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=E:\w.xls',sheet1$)
    /*===================================================================*/
    --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
    insert  into  OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’
    ,’Excel  5.0;HDR=YES;DATABASE=c:\test.xls’,sheet1$)
    select  *  from  表
    --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
    --导出表的情况
    EXEC  master..xp_cmdshell  ’bcp  数据库名.dbo.表名  out  "c:\test.xls"  /c  -/S"服务器名"  /U"用户名"  -P"密码"’--导出查询的情况
    EXEC  master..xp_cmdshell  ’bcp  "SELECT  au_fname,  au_lname  FROM  pubs..authors  ORDER  BY  au_lname"  queryout  "c:\test.xls"  /c  -/S"服务器名"  /U"用户名"  -P"密码"’说明.c:\test.xls    为导入/导出的Excel文件名.
    sheet1$            为Excel文件的工作表名,一般要加上$才能正常使用.  下面是导出真正Excel文件的方法:
    /*--数据导出EXCEL
      
      导出表中的数据到Excel,包含字段名,文件为真正的Excel文件
      ,如果文件不存在,将自动创建文件
      ,如果表不存在,将自动创建表
      基于通用性考虑,仅支持导出标准数据类型
    ---*//*--调用示例  p_exporttb  @tbname=’地区资料’,@path=’c:\’,@fname=’aa.xls’
    --*/
    if  exists  (select  *  from  dbo.sysobjects  where  id  =  object_id(N’[dbo].[p_exporttb]’)  and  OBJECTPROPERTY(id,  N’IsProcedure’)  =  1)
    drop  procedure  [dbo].[p_exporttb]
    GOcreate  proc  p_exporttb
    @tbname  sysname,        --要导出的表名,注意只能是表名/视图名
    @path  nvarchar(1000),      --文件存放目录
    @fname  nvarchar(250)=’’    --文件名,默认为表名
    as
    declare  @err  int,@src  nvarchar(255),@desc  nvarchar(255),@out  int
    declare  @obj  int,@constr  nvarchar(1000),@sql  varchar(8000),@fdlist  varchar(8000)--参数检测
    if  isnull(@fname,’’)=’’  set  @fname=@tbname+’.xls’--检查文件是否已经存在
    if  right(@path,1)<>’\’  set  @path=@path+’\’
    create  table  #tb(a  bit,b  bit,c  bit)
    set  @sql=@path+@fname
    insert  into  #tb  exec  master..xp_fileexist  @sql--数据库创建语句
    set  @sql=@path+@fname
    if  exists(select  1  from  #tb  where  a=1)
      set  @constr=’DRIVER={Microsoft  Excel  Driver  (*.xls)};DSN=’’’’;READONLY=FALSE’
                  +’;CREATE_DB="’+@sql+’";DBQ=’+@sql
    else
      set  @constr=’Provider=Microsoft.Jet.OLEDB.4.0;Extended  Properties="Excel  5.0;HDR=YES’
            +’;DATABASE=’+@sql+’"’--连接数据库
    exec  @err=sp_oacreate  ’adodb.connection’,@obj  out
    if  @err<>0  goto  lberrexec  @err=sp_oamethod  @obj,’open’,null,@constr
    if  @err<>0  goto  lberr--创建表的SQL
    select  @sql=’’,@fdlist=’’
    select  @fdlist=@fdlist+’,’+a.name
      ,@sql=@sql+’,[’+a.name+’]  ’
        +case  when  b.name  in(’char’,’nchar’,’varchar’,’nvarchar’)  then
              ’text(’+cast(case  when  a.length>255  then  255  else  a.length  end  as  varchar)+’)’
          when  b.name  in(’tynyint’,’int’,’bigint’,’tinyint’)  then  ’int’
          when  b.name  in(’smalldatetime’,’datetime’)  then  ’datetime’
          when  b.name  in(’money’,’smallmoney’)  then  ’money’
          else  b.name  end
    FROM  syscolumns  a  left  join  systypes  b  on  a.xtype=b.xusertype
    where  b.name  not  in(’image’,’text’,’uniqueidentifier’,’sql_variant’,’ntext’,’varbinary’,’binary’,’timestamp’)
      and  object_id(@tbname)=id
    select  @sql=’create  table  [’+@tbname
      +’](’+substring(@sql,2,8000)+’)’
      ,@fdlist=substring(@fdlist,2,8000)exec  @err=sp_oamethod  @obj,’execute’,@out  out,@sql
    if  @err<>0  goto  lberrexec  @err=sp_oadestroy  @obj--导入数据
    set  @sql=’openrowset(’’MICROSOFT.JET.OLEDB.4.0’’,’’Excel  5.0;HDR=YES
          ;DATABASE=’+@path+@fname+’’’,[’+@tbname+’$])’exec(’insert  into  ’+@sql+’(’+@fdlist+’)  select  ’+@fdlist+’  from  ’+@tbname)returnlberr:
      exec  sp_oageterrorinfo  0,@src  out,@desc  out
    lbexit:
      select  cast(@err  as  varbinary(4))  as  错误号
        ,@src  as  错误源,@desc  as  错误描述
      select  @sql,@constr,@fdlist
    go  *--数据导出EXCEL
      
      导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件
      ,如果文件不存在,将自动创建文件
      ,如果表不存在,将自动创建表
      基于通用性考虑,仅支持导出标准数据类型
    --*//*--调用示例  p_exporttb  @sqlstr=’select  *  from  地区资料’
        ,@path=’c:\’,@fname=’aa.xls’,@sheetname=’地区资料’
    --*/
    if  exists  (select  *  from  dbo.sysobjects  where  id  =  object_id(N’[dbo].[p_exporttb]’)  and  OBJECTPROPERTY(id,  N’IsProcedure’)  =  1)
    drop  procedure  [dbo].[p_exporttb]
    GOcreate  proc  p_exporttb
    @sqlstr  sysname,        --查询语句,如果查询语句中使用了order  by  ,请加上top  100  percent,注意,如果导出表/视图,用上面的存储过程
    @path  nvarchar(1000),      --文件存放目录
    @fname  nvarchar(250),      --文件名
    @sheetname  varchar(250)=’’    --要创建的工作表名,默认为文件名
    as  
    declare  @err  int,@src  nvarchar(255),@desc  nvarchar(255),@out  int
    declare  @obj  int,@constr  nvarchar(1000),@sql  varchar(8000),@fdlist  varchar(8000)
      

  8.   

    楼上强人,我都看迷糊了。Excel.ApplicationClass my=null;
    Excel.Workbook myBook=null;
    Excel.Worksheet mySheet=null;
    object objMissing = System.Reflection.Missing.Value; 
    my=new Excel.ApplicationClass();
    my.Visible=false;
    myBook=my.Workbooks.Open(filename,objMissing,objMissing, objMissing, 
    objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing,
    objMissing,objMissing);
    mySheet=(Excel.Worksheet)myBook.Worksheets.get_Item(1);我的代码虽不多,但也好用.我用的是office xp 如果是用office 2000,则去掉两个objMissing
    但楼主要记得,一定要将调用Excel.exe才能运行。
      

  9.   

    改一下:Excel.ApplicationClass my=null;
    Excel.Workbook myBook=null;
    Excel.Worksheet mySheet=null;
    object objMissing = System.Reflection.Missing.Value; 
    filename=@"e:\aaa.xls";my=new Excel.ApplicationClass();
    my.Visible=true;
    myBook=my.Workbooks.Open(filename,objMissing,objMissing, objMissing, 
    objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing, 
    objMissing, objMissing, objMissing,
    objMissing,objMissing);
    mySheet=(Excel.Worksheet)myBook.Worksheets.get_Item(1);
      

  10.   

    我前阵子用的一个excel写入access数据库的方法你看看可能对你有点帮助:思路:将Excel当一个表读出到一个dataset再将dataset内容写入一个access中
    ------------------------------------------------------------------------
    //这里是excel的连接方式. string str=textBox1.Text ;
    str=str.Substring (str.Length -9,5);  //取得文件名,因为文件名与内sheet同名,所以可以通过文件名得到sheet1的名.
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+textBox1.Text +";"+"Extended Properties=Excel 8.0;";
    OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open ();
    string strExcel="select * from ["+str+"$]";
    OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
    DataSet myDataSet = new DataSet();
    try
    { myCommand.Fill(myDataSet,"table1");
    }
    catch 
    {
    throw;
    }
    finally
    {
    conn.Close ();
    }
    //dataGrid1.DataSource =myDataSet;

    //这里是建立access连接串,并准备往里面写东西.
    string path1= System.Windows.Forms.Application.StartupPath +"\\data1.mdb";   
    string strConn1  =  "Provider=Microsoft.Jet.OLEDB.4.0;  Data Source="+ path1  +";";  
    OleDbConnection conn1 = new OleDbConnection(strConn1);
    string sql1="select * from table1";
    OleDbCommand myCommand1=new  OleDbCommand(sql1,conn1);
    conn1.Open ();

    //往数据库中填充数据
    foreach(DataRow excelRow in myDataSet.Tables["table1"].Rows)
    {
    sql1="insert into table1(numb,price,mtotal,date1,cn,cfn,csn,dosa,rout,stren,mea1,vol,mea2,hospcode) values({0},{1},{2},'{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}')";
    string[] tempArray=new string[11]; //前三个为数据,但仍然要判断.是否为0; string num1;
    string num2;
    string num3;

    num1=excelRow[0].ToString ();
    num2=excelRow[1].ToString ();
    num3=excelRow[2].ToString (); if (num1=="") num1= "0";
    if (num2=="") num2="0";
                    if (num3=="") num3="0";
                    




    //------------------------------------------处理完前三个数.     

    // if (excelRow[3].ToString ()!=null)
    //
    // tempArray[0]=excelRow[3].ToString ();
    // else
    // tempArray[0]=string.Empty ;
    //
    // tempArray[0]=excelRow[3].ToString ();
    tempArray[1]=excelRow[4].ToString ();
    tempArray[2]=excelRow[5].ToString ();
    tempArray[3]=excelRow[6].ToString ();
    tempArray[4]=excelRow[7].ToString ();
    tempArray[5]=excelRow[8].ToString ();
    tempArray[6]=excelRow[9].ToString ();
    tempArray[7]=excelRow[10].ToString ();
    if (excelRow[11].ToString ()!=null)
         tempArray[8]=excelRow[11].ToString ();
    else
    tempArray[8]=string.Empty ; if (excelRow[12].ToString ()!=null)
    tempArray[9]=excelRow[12].ToString ();
    else
    tempArray[9]=string.Empty ; if (excelRow[13].ToString ()!=null)
    tempArray[10]=excelRow[13].ToString ();
    else
    tempArray[10]=string.Empty;
    //sql1=string.Format (sql1,excelRow[0],excelRow[1],excelRow[2],tempArray[0],tempArray[1],tempArray[2],tempArray[3],tempArray[4],tempArray[5],tempArray[6],tempArray[7],tempArray[8],tempArray[9],tempArray[10]);
    sql1=string.Format (sql1,num1,num2,num3,tempArray[0],tempArray[1],tempArray[2],tempArray[3],tempArray[4],tempArray[5],tempArray[6],tempArray[7],tempArray[8],tempArray[9],tempArray[10]);
    myCommand1.CommandText =sql1;
    try
    {
    //myCommand1.CommandText ="insert into table4(numb,price,mtotal,date1,cn,cfn,csn,dosa,rout,stren,mea1,vol,mea2,hospcode) values('11','11','11','11','11','11','11','11','11','11','11','11','11','11')";
    myCommand1.ExecuteNonQuery ();
    }
    catch
    {
    throw; //just pass the exception up
    }
    }