怎么才可以实现在一个web页面点一个按钮之后上传一个Excel文件的数据到SQLServer2005的数据到数据库里面,之前把一个按钮的Onclick事件里调用了一个Winfrom程序集里的一个类,可以弹出一个对话框,然后选择一个Excel文件之后可以把里面的内容全部导入到数据库里去,但是这样做的话我把网站预编译好发布到IIS上去之后在客户端访问的时候就报错,错误如下:当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作。请指定 ServiceNotification 或 DefaultDesktopOnly 样式,以显示服务应用程序发出的通知。 上网查了一下原因好像是无法将服务器窗体应用程序里的对话框传送到客户端,在预编译之前我直接用VS运行是可以的,原因的话可能是我的电脑又是服务端又是客户端的原因吧,不知道有高手做过类似的应用没,指教一下。

解决方案 »

  1.   

    web页面的话,可以先使用FileUpload控件先从客户端将excel文件上传到服务器端吧,然后在服务器端读取excel文件中的数据,再将读取的数据插入的数据库里面吧。public static DataTable ReadExcel(string filePath, string conStr)
    {
    string conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
    OleDbConnection con = new OleDbConnection(conString);
    OleDbDataAdapter oda = new OleDbDataAdapter(conStr, con);
    DataTable dt = new DataTable();
    con.Open();
    oda.Fill(dt);
    con.Close();
    return dt;
    }
      

  2.   

     DataTable Excel_UserInfo = new DataTable();
    string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileInfo.FullName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
                    string strExcel = "select * from [sheet1$]";                using (OleDbDataAdapter adaptor = new OleDbDataAdapter(strExcel, strConn))
                    {
                        DataSet ds = new DataSet();
                        adaptor.Fill(ds);
                        Excel_UserInfo = ds.Tables[0];
                    }然后遍历DataTable  插入数据库 用事务。
    //执行事务处理
    public void DoTran()
    {  //建立连接并打开
     SqlConnection myConn=GetConn();
     myConn.Open();
     SqlCommand myComm=new SqlCommand();
     //SqlTransaction myTran=new SqlTransaction();
     //注意,SqlTransaction类无公开的构造函数
     SqlTransaction myTran;
     //创建一个事务
     myTran=myConn.BeginTransaction();
     try
     {
      //从此开始,基于该连接的数据操作都被认为是事务的一部分
      //下面绑定连接和事务对象
      myComm.Connection=myConn;
      myComm.Transaction=myTran; //定位到pubs数据库
      myComm.CommandText="USE pubs";
      myComm.ExecuteNonQuery();//操作1
      myComm.CommandText=""; //操作2
      myComm.ExecuteNonQuery();
       //提交事务
      myTran.Commit();
     }
     catch(Exception err)
     {
      myTran.rollback();
      throw new ApplicationException("事务操作出错,系统信息:"+err.Message);
      }
     finally
     {
      myConn.Close();
      }
    }