我使用xp+vs.net2003+iis实现了一个Excel导入sql server功能,本地执行导入(从不同的磁盘位置)正常。但是将程序移植到服务器上(Win2003),使用客户端机器访问服务器,执行导入功能,出现很怪错误:如下所示
    1、执行时候IE显示错误:
Microsoft Jet 数据库引擎打不开文件''。 它已经被别的用户以独占方式打开,或没有查看数据的权限。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.Data.OleDb.OleDbException: Microsoft Jet 数据库引擎打不开文件''。 它已经被别的用户以独占方式打开,或没有查看数据的权限。
源错误: 
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  
堆栈跟踪: 
[OleDbException (0x80004005): Microsoft Jet 数据库引擎打不开文件''。  它已经被别的用户以独占方式打开,或没有查看数据的权限。]
   System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20
   System.Data.OleDb.OleDbConnection.InitializeProvider() +57
   System.Data.OleDb.OleDbConnection.Open() +203
   System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState) +44
   System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +304
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +77
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38
   E_InfoSys.CaiwbbAdd.Button1_Click(Object sender, EventArgs e) +426
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1292    2、将文件放置桌面,执行导入错误:
'C:\Documents and Settings\zxm\桌面\华北空运.xls'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 
异常详细信息: System.Data.OleDb.OleDbException: 'C:\Documents and Settings\zxm\桌面\AAA.xls'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。源错误: 
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  
堆栈跟踪: 
[OleDbException (0x80004005): 'C:\Documents and Settings\zxm\桌面\AAA.xls'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。]
   System.Data.OleDb.OleDbConnection.ProcessResults(Int32 hr) +20
   System.Data.OleDb.OleDbConnection.InitializeProvider() +57
   System.Data.OleDb.OleDbConnection.Open() +203
   System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState) +44
   System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +304
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +77
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +38
   E_InfoSys.CaiwbbAdd.Button1_Click(Object sender, EventArgs e) +426
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1292说明:1.我的Excel程序没有打开此文件;
      2.我网上找了一下此问题的原因,似乎是服务器权限的问题,但是没有解决。哪位大侠具体指点一下,怎么设置,修改,小弟万分感谢!!!! 
 

解决方案 »

  1.   

    private void btnAdd_Click(object sender, EventArgs e)
    {
    lblID.Text=list.SelectedValue;
    if(lblID.Text.Trim()=="")
    {
    MessageBox.Show(Page,"请先选择大纲。");
    return;
    } if(listCoefficient.SelectedValue.Trim()=="")
    {
    MessageBox.Show(Page,"请先选择难度系数。");
    return;
    } if(fileUp.PostedFile.FileName=="")
    {
    MessageBox.Show(Page,"请先选择文件。");
    return;
    }
    string filePath="",fileExtName="",mFileName="",mPath="";
    StringBuilder strMsg = new StringBuilder("上传的文件信息:<hr color=red>");
    if("" != fileUp.PostedFile.FileName)
    {
    filePath =fileUp.PostedFile.FileName;//取得文件路径
    fileExtName= filePath.Substring(filePath.LastIndexOf(".")+1);
    if(fileExtName.ToUpper()!="XLS")
    {
    MessageBox.Show(Page,"文件必须为EXCEL表格。");
    return;
    } try
    {
    //取得与 Web 服务器上的指定虚拟路径相对应的物理文件路径。
    mPath=Server.MapPath("upfile/");
    mFileName=filePath.Substring(filePath.LastIndexOf("\\")+1);;//取得文件名
    strMsg.Append("上传的文件类型:" + fileUp.PostedFile.ContentType.ToString() + "<br>");
    strMsg.Append("客户端文件地址:" + fileUp.PostedFile.FileName + "<br>");
    strMsg.Append("上传文件的文件名:" + mFileName + "<br>");
    strMsg.Append("上传文件的扩展名:" + fileExtName);
    //保存上传文件到指定的目录
    fileUp.PostedFile.SaveAs(mPath + mFileName);
    }
    catch(Exception error)
    {
    Response.Write(error.ToString());
    }
    Add(mPath,mFileName,int.Parse(lblID.Text),int.Parse(listCoefficient.SelectedValue.Trim()));
    }
    }
      

  2.   

    private void Add(string mPath,string mFileName,int OutLineID,int CoefficientID)
    {
    DataTable myTable=new DataTable("ExcelTable");
    String strConnection="Provider=Microsoft.Jet.OleDb.4.0;data source="+mPath+mFileName+";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
    OleDbConnection objConnection=new OleDbConnection(strConnection); String strSQL="SELECT * FROM [Sheet1$]";
    OleDbCommand objCommand=new OleDbCommand(strSQL,objConnection);
    OleDbDataAdapter objDataAdapter=new OleDbDataAdapter(objCommand);
    objConnection.Open();
    objDataAdapter.Fill(myTable);
    objConnection.Close();

    if(myTable.Rows.Count<1)
    {
    MessageBox.Show(Page,"表格内容为空。");
    return;
    }
    StringBuilder strInSertSQL=new StringBuilder();
    BusFunction myBusFunction=new BusFunction();
    foreach(DataRow myRow in myTable.Rows)
    {
    strInSertSQL.Append("insert into Judge(");
    strInSertSQL.Append("CoefficientID,OutlineID,Title,isRight");
    strInSertSQL.Append(")");
    strInSertSQL.Append(" values (");
    strInSertSQL.Append(""+CoefficientID+",");
    strInSertSQL.Append(""+OutLineID+",");
    strInSertSQL.Append("'"+myBusFunction.EnCos(myRow["题干"].ToString())+"',");
    strInSertSQL.Append("'"+myBusFunction.EnCos(myRow["答案"].ToString()).Trim().Substring(0,1)+"'");
    strInSertSQL.Append(");");
    }
    DbHelperSQL.ExecuteSql(strInSertSQL.ToString());
    MessageBox.Show(Page,"导入成功。");
    return;
    }
      

  3.   

    没有对该文件的操作权限!找到该文件,属性-安全-添加Everyone所有权限,肯定就可以了