Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取固定格式文本文件.第2部分_C#_C# 4.0_Oledb - Fatal编程技术网

C# 读取固定格式文本文件.第2部分

C# 读取固定格式文本文件.第2部分,c#,c#-4.0,oledb,C#,C# 4.0,Oledb,这是本报告的后续问题 我正在尝试使用Microsoft.ACE.OLEDB.12.0提供程序读取固定格式的文本文件。我有六种不同的方法来设置驱动程序和/或提供程序,每次都会遇到相同的问题。由于某些原因,我甚至无法“开始”,因为“找不到可安装的ISAM”异常或驱动程序的错误和异常 系统安装了Office2007,因此“找不到可安装的ISAM”没有多大意义 有人看到下面代码的问题吗 string DATABASE_PROVIDER = "Provider=Microsoft.ACE.OLEDB.12

这是本报告的后续问题

我正在尝试使用Microsoft.ACE.OLEDB.12.0提供程序读取固定格式的文本文件。我有六种不同的方法来设置驱动程序和/或提供程序,每次都会遇到相同的问题。由于某些原因,我甚至无法“开始”,因为“找不到可安装的ISAM”异常或驱动程序的错误和异常

系统安装了Office2007,因此“找不到可安装的ISAM”没有多大意义

有人看到下面代码的问题吗

string DATABASE_PROVIDER = "Provider=Microsoft.ACE.OLEDB.12.0";
string CVS = Application.StartupPath + @"\Data.txt";
string connectionString = DATABASE_PROVIDER = ";Data Source=" + CVS +";Extended Properties=text;HDR=Yes;FMT=Fixed";
string field ="*";
string table ="Data";
string StringQueryCMD = "SELECT" + field+" FROM " + table;
OleDbConnection myConnection = new OleDbConnection( connectionString );
OleDbCommand cmd = myConnection.CreateCommand();
cmd.CommandText = StringQueryCmd;
myConnection.Open(); // <---- "Could not find installable ISAM" exception here
OleDataAdapter myDataAdapter = new OleDbDataAdapter(cmd);
DataTable Table = new DataTable("Data");// <---- "Could not find installable ISAM" exception here

myDataAdapter.Fill(Table);
string DATABASE\u PROVIDER=“PROVIDER=Microsoft.ACE.OLEDB.12.0”;
字符串CVS=Application.StartupPath+@“\Data.txt”;
字符串连接字符串=数据库_提供程序=“;数据源=“+CVS+”;扩展属性=文本;HDR=是;FMT=固定”;
字符串字段=“*”;
string table=“数据”;
string StringQueryCMD=“从“+表中选择“+字段+”;
OLEDB连接myConnection=新的OLEDB连接(connectionString);
OleDbCommand cmd=myConnection.CreateCommand();
cmd.CommandText=StringQueryCmd;
myConnection.Open();// 我将使用库来读取固定长度的文件,而不是ADO.Net

更新 在这种情况下,我认为您需要一个ini文件以及定义txt文件的txt文件。列宽、名称等

另一个选择是完全放弃ado.net,创建一个简单的固定长度文件读取器

var file = new FileInfo("path");
using(var reader = file.Open())
while(reader.Read())
{
   //parse the line
   yield return the object representing the parsed line.
}

我最终用了一个稍微不同的解决方案。“找不到可安装ISAM”异常的解决方案是使用以下方法:

string EXTENDED_PROPERTIES = @"Extended Properties=""Text;HDR=YES;FMT=FixedLength;""";
解决方案的关键是围绕“扩展属性”值的。我能够用文件的内容填充DataTable,我认为ini文件存在问题,因此它包含了对我来说毫无用处的“----”字符串

所以我最终只是简单地阅读了access数据库

string DATABASE_PROVIDER = "Provider=Microsoft.ACE.OLEDB.12.0";
string CVS Application.StartupPath + ""\\Database.accdb";
string DATA_SOURCE = "Data Source" + CVS;
string connectionString = DATABASE_PROVIDER + DATA_SOURCE;
string TABLE = " FROM STUFF";
string SELECT = "SELECT CODE, NAME, ICON, FUNCTION;
string StringQueryCmd = SELECT + TABLE;

OleDbConnection MyConnection = new OleDbConnection(connectionString);
OleDbCommand Command = OleDbCommand(StringQueryCmd,MyConnection);
OleDbAdapter MyDataAdapter = new OleDbAdapter(Command);
DataSet MyDataSet = new DataSet();
DataTable MyDataTable = new DataTable();
MyConnection.Open();
MyDataAdapter.Fill(MyDataSet,"STUFF");
MyConnection.Close();

一旦你有了一个数据表,理论上你可以使用LINQ来数据集,而不是处理数据表。

我自己就能够解决这个问题。我将在接下来的3小时内发布问题的解决方案,并尝试解释解决方案。这归结为一个事实,几乎我看到的所有示例实际上都是错误的。我给了你一个答案投票…希望这对你有帮助。由于我在
超级用户
上的活动,我在SO连续向下投票的问题变得很可笑。如果你对我说的有问题,来聊天室跟我谈谈,不要连续向下投票给我
Stackoverflow
超级用户
,反正都会颠倒过来的是的。请在投票时留下评论,我不想因为一些随机的人的自我受到伤害而将这个问题从我的帐户上断开!5张反对票没有一条评论