Cher communauté Stackoverflow,Erreur d'exécution de Visual Studio 2010 et FoxPro 9.0 Erreur: "La fonction n'est pas disponible."
Je suis un peu confus en utilisant la bibliothèque VFPOleDb (9.0Sp2) dans Visual Studio 2010 avec le profil client .NET 4.0. Que dois-je faire? Modifier les fichiers existants et créer de nouveaux fichiers de base de données FoxPro en utilisant C#.
Essayer de compiler mon propre exemple et se basant sur les exemples vus dans « Comment créer un fichier DBF à partir de zéro en C# » (1), « Comment puis-je lire une base de données FoxPro 8.0 de C# » (2) et " Programmation de la base de données avec Visual FoxPro "(3) Je reçois une erreur de compilation:" Fonction non disponible ". Empiler le message d'exception me montre que la fabrique OleDbConnection ne reconnaît pas la chaîne de connexion? J'ai déjà ajouté 'Interop.VFPOLEDBLib' comme référence, mais je n'ai pas pu ajouter 'vfpoledb.dll' à cause d'un fichier manifeste manquant?
code-Exemple
using System;
using System.IO;
using System.Data;
using System.Data.Odbc;
using System.Data.OleDb;
using System.Data.Common;
namespace VFPExample
{
class VFPExample
{
/*
https://stackoverflow.com/questions/754436/odbc-dbf-files-in-c-sharp/
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic62548.aspx
*/
static void Main(String[] args)
{
{
string strTestDirectory = @"Provider=VFPOLEDB.1; DataSource=D:\TEMP\";
using (OleDbConnection vfpro_con_insert =
new OleDbConnection(strTestDirectory))
{
vfpro_con_insert.Open(); // FIXME: Ex.Message: "Feature not available";
OleDbCommand createTable = new OleDbCommand(@"Create Table TestDBF (Field1 I, Field2 C(10))", vfpro_con_insert);
OleDbCommand insertTable1 = new OleDbCommand(@"Insert Into TestDBF Values (1, 'Hello')", vfpro_con_insert);
OleDbCommand insertTable2 = new OleDbCommand(@"Insert Into TestDBF Values (2, 'World')", vfpro_con_insert);
createTable.ExecuteNonQuery();
insertTable1.ExecuteNonQuery();
insertTable2.ExecuteNonQuery();
Console.WriteLine("Wrote in " + vfpro_con_insert.DataSource);
}
Console.ReadLine();
/*
--------------------------------------------------------------------------------
*/
using (OleDbConnection vfpro_con_read = new OleDbConnection(strTestDirectory))
{
vfpro_con_read.Open();
OleDbCommand readTable = new OleDbCommand("Select * From TestDBF (Field1 I, Field2 C(10))", vfpro_con_read);
OleDbDataAdapter da = new OleDbDataAdapter(readTable);
DataSet ds = new DataSet();
// DataRow dr = new DataRow();
da.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows)
{
Console.WriteLine(dr.ItemArray[1].ToString());
}
}
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("\n\n Exception:\n\n{0}", e.Message); // Set Breakpoint here for detailed StackTrace
}
}
}
}
StackTrace
> e {"Feature is not available."} System.Exception {System.Data.OleDb.OleDbException}
> [System.Data.OleDb.OleDbException]
> {"Feature is not available."}
> System.Data.OleDb.OleDbException
> Data {System.Collections.ListDictionaryInternal}
> System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
> HelpLink null string
> InnerException null System.Exception
> Message "Feature is not available." string
> Source "Microsoft OLE DB Provider for Visual FoxPro" string
> StackTrace "
> at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
> at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
> at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
> at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
> at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
> at System.Data.OleDb.OleDbConnection.Open()
> at bestsellerList.VFPExample.Main(String[] args)
> in D:\Visual Studio 2010\Projects\VFPExample\VFPExample.cs:Line 37." string
> TargetSite {Void .ctor(System.Data.OleDb.OleDbConnectionString, System.Data.OleDb.OleDbConnection)} System.Reflection.MethodBase {System.Reflection.RuntimeConstructorInfo}
> Static Member
> No(t) public Member
> e.Message "Feature is not available." string
(ai essayé de fixer la localisation)
Je besoin de quelques éclaircissements sur vfpoledb/Visual FoxPro dans Visual Studio:
La bibliothèque Visual FoxPro est-elle uniquement prise en charge avec .NET Client Profile 2.0 et/ou Visual Studio 2003/5 (et versions antérieures)? En outre, je peux clairement voir que VSFoxPro (5) a atteint son cycle de vie de fin de produit (4) - au moins pour le support Mainstream. Le support étendu est toujours accordé jusqu'en 2015. Existe-t-il d'autres documents (semi) officiels ou entrées de blog de Microsoft concernant la migration des bases de données FoxPro? Déjà vu "Migration à partir de Visual FoxPro" (6).
Existe-t-il des compilations réussies avec .NET 3.x (profil client) et supérieur?
Que manque-t-il dans mon exemple de code et/ou Reference dans Visual Studio?
Alors, je pris l'exemple de code, il a modifié à mes besoins - lire une table avec six colonnes et beaucoup, beaucoup de lignes est exportée sous forme de fichier csv; fonctionne bien sur ma machine locale (comme d'habitude, comme nous le savons tous) - et copié l'exécutable à un Windows 2008 Server R2 avec .NET 3.5.x installé et essayé de démarrer l'application. Avez-vous déjà fait une supposition bien éduquée?
Encore une fois je reçois la même exception que la première fois, mais cette fois-ci ressemble que
DataSet ds = new DataSet();
da.Fill(ds); // throws Exception
da.Fill(ds)
est le fauteur de troubles, mais cela n'a vraiment aucun sens pour moi, parce que je aussi copié le exemple- compilé application basée sur le code corrigé au serveur et il fait juste ce qu'il est censé faire ...
Merci pour tous les conseils.
Exception
System.Data.OleDb.OleDbException: Feature is not available.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
at Program.Main(String[] args)
System.Collections.ListDictionaryInternal
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
at Program.Main(String[] args)
Vous avez raison. J'ai manqué le blanc dans 'Data Source' et cela a provoqué l'Exception. – hal