我有以下代码从平面文件中获取数据。但现在我突然得到这个错误
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权限有问题吗?
答案 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\;