Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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# vfpoledb.1给出了IErrorInfo.GetDescription在第二次打开时失败,E_失败(0x80004005)_C#_Sql - Fatal编程技术网

C# vfpoledb.1给出了IErrorInfo.GetDescription在第二次打开时失败,E_失败(0x80004005)

C# vfpoledb.1给出了IErrorInfo.GetDescription在第二次打开时失败,E_失败(0x80004005),c#,sql,C#,Sql,vfpoledb.1给出了IErrorInfo.GetDescription在第二次打开时失败,E_失败(0x80004005) 有两个例程使用到同一数据库的连接,每个例程根据用户的选择进行调用。 如果我先选择第一个,它工作,第二个失败。 如果我先选择第二个,它工作,第一个失败。 我可以反复选择其中一个,它可以工作。 或者,调用第一个,第二个失败,然后第一个工作。 我猜在应用程序关闭之前,它不会真正断开连接,但是当我第一次使用它时,如何强制它关闭,以便我可以在同一“数据库”中的不同dbf文件文件

vfpoledb.1给出了IErrorInfo.GetDescription在第二次打开时失败,E_失败(0x80004005) 有两个例程使用到同一数据库的连接,每个例程根据用户的选择进行调用。 如果我先选择第一个,它工作,第二个失败。 如果我先选择第二个,它工作,第一个失败。 我可以反复选择其中一个,它可以工作。 或者,调用第一个,第二个失败,然后第一个工作。 我猜在应用程序关闭之前,它不会真正断开连接,但是当我第一次使用它时,如何强制它关闭,以便我可以在同一“数据库”中的不同dbf文件文件夹中再次使用它

strFilename = "OneOfTheFoxProDBTables"
System.Data.OleDb.OleDbConnection conFPro = new System.Data.OleDb.OleDbConnection("Provider=VFPOLEDB.1;Data Source=\\\\fileserver01\\dbfFolder\\;");
var sqlselect = "select id, sColumn1, sColumn2 from 'FILENAME.dbf'  ".Replace("FILENAME", strFilename);
System.Data.OleDb.OleDbCommand cmd3 = new System.Data.OleDb.OleDbCommand(sqlselect, conFPro);
conFPro.Open();
DataSet dsDbfTableRows = new DataSet();
System.Data.OleDb.OleDbDataAdapter da3 = new System.Data.OleDb.OleDbDataAdapter(cmd3);
da3.Fill(dsDbfTableRows);  // THIS WORKS !!
conFPro.Close();   
conFPro.Dispose();  //?? Tried with and without, doesn't seem to matter.   
然后,在一个单独的方法中,在一个单独的类中:

strFilename = "AnotherFoxProDBTables"   
System.Data.OleDb.OleDbConnection conFPro2 = new System.Data.OleDb.OleDbConnection("Provider=VFPOLEDB.1;Data Source=\\\\fileserver02\\dbfFolder\\;");    
var sqlselect02 = "select id, sColumnA, sColumnB from 'FILENAME.dbf' ".Replace("FILENAME", strFilename);    
System.Data.OleDb.OleDbCommand cmd5 = new System.Data.OleDb.OleDbCommand(sqlselect02, conFPro2);    
conFPro2.Open();        // <--- FAILS HERE! >>>  IErrorInfo.GetDescription failed with E_FAIL(0x80004005)    
DataSet dsDbfTableRows = new DataSet();
System.Data.OleDb.OleDbDataAdapter da5 = new System.Data.OleDb.OleDbDataAdapter(cmd5);
da5.Fill(dsDbfTableRows); 
conFPro2.Close();   
conFPro2.Dispose();  
strFilename=“AnotherFoxProDBTables”
System.Data.OleDb.OleDbConnection conFPro2=新的System.Data.OleDb.OleDbConnection(“Provider=VFPOLEDB.1;数据源=\\\\fileserver02\\dbfFolder\\;”;
var sqlselect02=“从“FILENAME.dbf”中选择id、sColumnA、sColumnB”。替换(“FILENAME”,strFilename);
System.Data.OleDb.OleDbCommand cmd5=新的System.Data.OleDb.OleDbCommand(sqlselect02,conFPro2);
conFPro2.Open();/>IErrorInfo.GetDescription失败,E_失败(0x80004005)
数据集dsDbfTableRows=新数据集();
System.Data.OleDb.OleDbDataAdapter da5=新的System.Data.OleDb.OleDbDataAdapter(cmd5);
da5.填充(dsDbfTableRows);
conFPro2.Close();
conFPro2.Dispose();

如果我随后交换调用这两段代码的顺序,第一段代码将正常工作,第二段代码将失败

VPOLEDB提供程序的Dispose()方法似乎有问题,因此在应用程序退出之前,它不会真正处理资源。将使用VPOLEDB提供程序的两个方法移动到同一个类中,可以使它们以任意顺序工作。

您应该添加一些代码,以便人们可以看到您在做什么。我并没有完全解决这个问题,但我想我可能已经为我的特定实现解决了这个问题。我将第二个方法移动到包含第一个方法的类中,现在无论调用顺序如何,它们都可以工作。