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

时间:2015-12-07 09:50:06

标签: json visual-foxpro

我有以下代码从平面文件中获取数据。但现在我突然得到这个错误

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.0\wwwroot\apps\assembly\FlatDatabaseDbfs\vt_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权限有问题吗?

2 个答案:

答案 0 :(得分:1)

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

Provider=VFPOLEDB.1

不知道是否是大小写/敏感问题,而“.1”也是提供者字符串的一部分。

一旦与PATH建立了有效连接,您的查询就可以从路径位置的任何表中进行查询。因此,如果您有2个以上的文件,并且需要加入它们,那么您可以使用标准查询/连接。在您的情况下,您的命令文本只是“select *”,因为您更改了包含该表的原始连接。将命令文本更改为

"select * from vt_Flat"

其他考虑事项

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

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

此外,从提供商连接,您是否尝试使用全部大写VFPOLEDB.1?

答案 1 :(得分:0)

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

Data Source=\\10.0.0.0\wwwroot\apps\assembly\FlatDatabaseDbfs\;