我有下面的代码,它一直在从平面文件中获取数据。但现在突然间,我得到了这个错误
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;