System.Data.OleDb.OleDbException:路径或文件名无效



我有下面的代码,它一直在从平面文件中获取数据。但现在突然间,我得到了这个错误

System.Data.OleDb.OleDbException: Invalid path or file name

但代码没有改变,它已经工作了几个月,我不确定出了什么问题。

System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();
    string jsonText;
    System.Collections.Generic.List<object> objList = new List<object>();
    string strConn = @"Provider=vfpoledb;Data Source=\10.0.0.0wwwrootappsassemblyFlatDatabaseDbfsvt_Flat.dbf;Collating Sequence=machine;";
    using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(strConn))
    {          
            System.Data.OleDb.OleDbCommand cmddbf = new System.Data.OleDb.OleDbCommand();
            cmddbf.Connection = conn;
            conn.Open();
        cmddbf.CommandText = "select * from vt_Flat";
        var dr = cmddbf.ExecuteReader();
        while (dr.Read())
        {
            objList.Add(new
            {
                Code = (dr["dp_code"].ToString().Trim()),
            });
        };
    } 
    var filteredList = objList.Where(obj => ((dynamic)obj).Status == (Request.QueryString["Status"] ?? "") && ((dynamic)obj).DepCode == (Request.QueryString["Code"] ?? ""));
    jsonText = json.Serialize(filteredList);
    Response.Write(jsonText);

}

iis权限有问题吗?

除了Oleg已经指出的连接必须指向PATH之外,在我过去做过的OleDbConnection的C#实例中,连接字符串使用

Provider=VFPOLEDB.1

不知道这是否是区分大小写的问题,以及".1",它也是提供程序字符串的一部分。

一旦您有了到PATH的有效连接,那么您的查询就可以从路径位置内的任何表进行查询。因此,如果您有2个以上的文件,并且需要连接它们,那么您可以使用标准的查询/连接来完成。在您的情况下,您的命令文本仅为"select*",因为您更改了包含该表的原始连接。将命令文本更改为

"select * from vt_Flat"

其他注意事项

这是从某个web服务项目运行的吗?如果是这样的话,这可能是基础。作为一名开发人员,您正在使用您的权限/访问权限进行测试。如果作为web服务器运行,则基于web的用户帐户可能无权访问文件夹来处理/使用数据。

检查生产数据的文件夹以允许网络用户运行。如果不起作用,请将文件夹的权限设置为EVERYBODY(仅用于测试/确认目的)。看看这是不是问题所在。

此外,从Provider连接,您是否尝试将其作为大写VFPOLEDB.1?

使用路径而不是文件名,例如:

Data Source=\10.0.0.0wwwrootappsassemblyFlatDatabaseDbfs;

最新更新