簡體   English   中英

vfpoledb.1給IErrorInfo.GetDescription失敗,第二次打開時出現E_FAIL(0x80004005)

[英]vfpoledb.1 gives IErrorInfo.GetDescription failed with E_FAIL(0x80004005) on 2nd open

vfpoledb.1給出IErrorInfo.GetDescription失敗,並在第二次打開時出現E_FAIL(0x80004005)。有2個例程使用到同一數據庫的連接,每個例程均基於用戶選擇被調用。 如果我首先選擇第一個,則它可以工作,而第二個則失敗。 如果我先選擇第二個,它會工作,而第一個失敗。 我可以反復選擇其中一個,它可以正常工作。 或者,調用第一個,第二個失敗,第一個在此之后工作。 我猜測直到應用程序關閉它才真正斷開連接,但是當我第一次使用它時如何強制關閉它,以便我可以再次使用它在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();  

如果我隨后交換調用這兩個代碼塊的順序,則第一個將起作用,第二個將失敗。

VPOLEDB提供程序的Dispose()方法似乎存在問題,因此直到應用程序退出之前,它才真正處置資源。 將使用VPOLEDB提供程序的兩種方法移到同一類,可以使它們以任何順序工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM