Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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# 关于在C中读取多个.dbf文件_C#_Dbf_Dbase_Oledbexception - Fatal编程技术网

C# 关于在C中读取多个.dbf文件

C# 关于在C中读取多个.dbf文件,c#,dbf,dbase,oledbexception,C#,Dbf,Dbase,Oledbexception,目前,我正在制作一个从多个dBase文件.dbf导入值的程序。我已经有了一个列表,其中包含以dBase文件名命名的字符串。该名单名为Ficheirosparanalisar。dBase文件并不总是有相同的行,但它们都有相同的列,其中包含我希望从一个名为sigla_parametro的特定列中获取的值。dBase文件位于path9中。我的代码如下: private void button6_Click(object sender, EventArgs e) { ///*

目前,我正在制作一个从多个dBase文件.dbf导入值的程序。我已经有了一个列表,其中包含以dBase文件名命名的字符串。该名单名为Ficheirosparanalisar。dBase文件并不总是有相同的行,但它们都有相同的列,其中包含我希望从一个名为sigla_parametro的特定列中获取的值。dBase文件位于path9中。我的代码如下:

private void button6_Click(object sender, EventArgs e)
    {
        ///*

        //Console.WriteLine(sigla_parametro);
        try
        {
            parametro = comboBox12.Text; //Console.WriteLine(parametro);

            for (int FA = 0; FA < FicheirosParaAnalisar.Count; FA++)
            {
                //Console.WriteLine(FicheirosParaAnalisar[FA]+".dbf");

                if (importar == true)
                {
                    //........................................................................
                    string connectionStringTotal = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path9 + ";Extended Properties=dBASE III;";

                    OleDbConnection connectionsTotal = new OleDbConnection(connectionStringTotal);
                    connectionsTotal.Open();

                    // Comando de aquisição dos dados da Base de Dados
                    string Comand_Strings_Total = "Select * From [" + FicheirosParaAnalisar[FA] + "]";

                    OleDbDataAdapter DataAdaptersTotal = new OleDbDataAdapter(Comand_Strings_Total, connectionsTotal);
                    DataSet datasetsTotal = new DataSet();
                    DataAdaptersTotal.Fill(datasetsTotal);

                    // Obter os valores dos parâmetros
                    int count = datasetsTotal.Tables[0].Rows.Count;
                    for (int i = 0; i < count; i++)
                    {
                        try
                        {
                            valores_parametro.Add(FicheirosParaAnalisar[FA] + "_" + datasetsTotal.Tables[0].Rows[i][sigla_parametro].ToString());
                        }
                        catch (System.Data.OleDb.OleDbException exe)
                        {
                            string text = "[MPA5 - " + DateTime.Now.ToString() + "] Excepção encontrada: " + exe.Message + "\n";
                            System.IO.File.AppendAllText(log, text);
                        }
                        catch (Exception lolex)
                        {
                            string text = "[MPA5 - " + DateTime.Now.ToString() + "] Excepção encontrada: " + lolex.Message + "\n";
                            System.IO.File.AppendAllText(log, text);
                        }
                    }
                    count = 0;
                }
                Console.WriteLine("Ficheiro nº " + FA + " Importado!");
            }  
        }
        catch (Exception ex)
        {
            string text = "[MPA5 - " + DateTime.Now.ToString() + "] Excepção encontrada: " + ex.Message + "\n";
            System.IO.File.AppendAllText(log, text);
        }

        //*/

        valores_parametro.ForEach(Console.WriteLine);

        button1.Enabled = true;
    }
现在我想问一下C中Stackoverflow的专家们,我做错了什么?如何将sigla_parametro列中的所有数据获取到字符串valores_parametro列表中?如何解决我的异常

注: 我还尝试使用此连接字符串

string connectionStringTotal = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path9 + ";Extended Properties=dBASE IV;";
字符串path9是包含所有数据库文件的文件夹的路径

string path9 = "C:\\ProgramData\\CK electronic\\MPA5\\Data";
FICHEROSPARANALISAR的字符串列表包含以下字符串:

CL-1831-150615-1
CL-1831-150615-2
CL-1831-150615-3
CL-1831-150615-4
CL-1831-150615-5
CL-1832-150611-1
CL-1832-150611-2
CL-1832-150611-3
CL-1832-150611-4
CL-1832-150611-5
CL-1833-150611-1
CL-1833-150611-2
CL-1833-150611-3
CL-1833-150611-4
CL-1833-150611-5
CL-1834-150611-1
CL-1834-150611-2
CL-1834-150611-3
CL-1834-150611-4
CL-1834-150611-5
CL-1835-150611-1
CL-1835-150611-2
CL-1835-150611-3
CL-1835-150611-4
CL-1835-150611-5
CL-1836-150612-1
CL-1836-150612-2
CL-1836-150612-3
CL-1836-150612-4
CL-1836-150612-5
CL-1837-150618-1
CL-1837-150618-2
CL-1837-150618-3
CL-1837-150618-4
CL-1837-150618-5
CL-1838-150611-1
CL-1838-150611-2
CL-1838-150611-3
CL-1838-150611-4
CL-1838-150611-5
CL-1839-150617-1
CL-1839-150617-2
CL-1839-150617-3
CL-1839-150617-4
CL-1839-150617-5
CL-1840-150611-1
CL-1840-150611-2
CL-1840-150611-3
CL-1840-150611-4
CL-1840-150611-5
CL-1841-150611-1
CL-1841-150611-2
CL-1841-150611-3
CL-1841-150611-4
CL-1841-150611-5
CL-1842-150611-1
CL-1842-150611-2
CL-1842-150611-3
CL-1842-150611-4
CL-1842-150611-5
CL-1843-150612-1
CL-1843-150612-2
CL-1843-150612-3
CL-1843-150612-4
CL-1843-150612-5
CL-1844-150616-1
CL-1844-150616-2
CL-1844-150616-3
CL-1844-150616-4
CL-1844-150616-5
CL-1844-150616-6
CL-1845-150615-1
CL-1845-150615-2
CL-1845-150615-3
CL-1845-150615-4
CL-1845-150615-5
CL-1846-150616-1
CL-1846-150616-2
CL-1846-150616-3
CL-1846-150616-4
CL-1847-150612-1
CL-1847-150612-2
CL-1847-150612-3
CL-1847-150612-4
CL-1847-150612-5
CL-1848-150612-1
CL-1848-150612-2
CL-1848-150612-3
CL-1848-150612-4
CL-1848-150612-5
CL-1850-150617-1
CL-1850-150617-2
CL-1850-150617-3
CL-1850-150617-4
CL-1850-150617-5
CL-1851-150616-1
CL-1851-150616-2
CL-1851-150616-3
CL-1851-150616-4
CL-1851-150616-5
CL-1852-150612-1
CL-1852-150612-2
CL-1852-150612-3
CL-1852-150612-4
CL-1852-150612-5
CL-1853-150616-1
CL-1853-150616-2
CL-1853-150616-3
CL-1853-150616-4
CL-1853-150616-5
CL-1854-150615-1
CL-1854-150615-2
CL-1854-150615-3
CL-1854-150615-4
CL-1854-150615-5
CL-1855-150616-1
CL-1855-150616-2
CL-1855-150616-3
CL-1855-150616-4
CL-1855-150616-5
CL-1856-150615-1
CL-1856-150615-2
CL-1856-150615-3
CL-1856-150615-4
CL-1856-150615-5
CL-1857-150616-1
CL-1857-150616-2
CL-1857-150616-3
CL-1857-150616-4
CL-1857-150616-5
CL-1858-150618-1
CL-1858-150618-2
CL-1858-150618-3
CL-1858-150618-4
CL-1858-150618-5
CL-1860-150618-1
CL-1860-150618-2
CL-1860-150618-3
CL-1860-150618-4
CL-1860-150618-5
CL-1861-150618-1
CL-1861-150618-2
CL-1861-150618-3
CL-1861-150618-4
CL-1861-150618-5
CL-1862-150618-1
CL-1862-150618-2
CL-1862-150618-3
CL-1862-150618-4
CL-1862-150618-5
CL-1863-150618-1
CL-1863-150618-2
CL-1863-150618-3
CL-1863-150618-4
CL-1863-150618-5

请务必告诉您,我有管理员权限读取和写入文件夹中的数据

如果没有你的实际变量样本,我会提出这个问题,并认为这可能是你的答案

OleDb连接字符串应仅指向表所在的路径,而不是路径+表名。连接到路径后,您可以查询该路径中的任何表

例:

那么,你可以

string Comand_Strings_Total = "Select * From Table1";
string Comand_Strings_Total = "Select * From Table2";
string Comand_Strings_Total = "Select * From Table3";
或者按照您的for循环进行构建

因此,如果需要联接表,可以

select T1.*, T2.*
   from Table1 T1
      JOIN Table2 T2
         on T1.Key = T2.MatchingKey
这两个表位于同一个文件夹中

好的,你的路径变量就是路径。。。在过去的几次中,其他人错误地连接到dbf中

至于您的表名,所有表名中都包含-可能是OleDb提供程序的瓶颈所在。是的,你的桌子周围有[方括号],但这可能不够好。您可能需要将其更改为引号,甚至可能需要在查询中添加别名。。。也许是

// This version uses double-quotes around the table name
string Comand_Strings_Total = string.Format( "Select * From \"{0}\" ", FicheirosParaAnalisar[FA] );
或者,这将为查询添加别名tmp引用

string Comand_Strings_Total = string.Format( "Select tmp.* From \"{0}\" tmp", FicheirosParaAnalisar[FA] );
如果仍然有错误,那么这些文件是dBASE文件,还是.dbf文件。您可以通过下载Microsoft的Visual Foxpro OleDb数据提供程序使其工作。OleDb上下文的其余连接、命令、数据适配器都是相同的。它可能会为您提供更好的连接选项。只需更改提供程序连接字符串。到

@"Provider=VFPOLEDB.1;Data Source=c:\\YourDataPath\\SomeSubFolder;";

请看我对你的问题的回答,因为太长了,无法评论:@user3664117,修改了我的答案。。。将来,你可以随时编辑你的原始帖子并添加详细内容,就像你在答案中发布的一样,而不是发布你自己问题的答案以进行澄清。很抱歉我的回答,德拉普,我是这个社区的新手。我试试你的解决办法。谢谢,伙计:你使用了你的连接字符串,并且得到了和以前一样的异常。看不出这里有什么问题:@user3664117,请参阅我的文章关于更改数据提供程序/连接字符串的最后编辑。
string Comand_Strings_Total = string.Format( "Select tmp.* From \"{0}\" tmp", FicheirosParaAnalisar[FA] );
@"Provider=VFPOLEDB.1;Data Source=c:\\YourDataPath\\SomeSubFolder;";