2010-12-09 91 views
3

ceci est mon codequelqu'un sait comment supprimer des données de foxpro pack de pilote oledb avec C#

//Probando insercion 
     OleDbConnection conexionFoxPro = new OleDbConnection(); 

     string rutaFoxPro = @"C:\Users\BigMander\Documents\Proyectos de Visual FoxPro\prueba.dbc"; 

     conexionFoxPro.ConnectionString = String.Format("Provider=VFPOLEDB.1;Data Source={0};Exclusive=Yes;", rutaFoxPro); 

     bool sePudoEjecutarTodo = true; 

     try 
     { 
      conexionFoxPro.Open(); 

      OleDbCommand comandoFoxPro = new OleDbCommand(); 

      comandoFoxPro.CommandText = 
       @"INSERT INTO test ([nombre], [telefono], [id]) VALUES (?, ?, ?)"; 


      comandoFoxPro.Parameters.Add("nombre", OleDbType.Char).Value = "bigmander"; 
      comandoFoxPro.Parameters.Add("telefono", OleDbType.Char).Value = "some number"; 
      comandoFoxPro.Parameters.Add("id", OleDbType.Integer).Value = 5; 

      comandoFoxPro.Connection = conexionFoxPro; 

      sePudoEjecutarTodo &= (comandoFoxPro.ExecuteNonQuery() > 0); 

      comandoFoxPro.CommandText = 
       @"SELECT nombre, telefono FROM test"; 

      OleDbDataReader reader = comandoFoxPro.ExecuteReader(); 

      while (reader.Read()) 
      { 
       Console.WriteLine("{0}: {1}", reader.GetName(0), reader["nombre"]); 
       Console.WriteLine("{0}: {1}", reader.GetName(1), reader["telefono"]); 
      } 

      reader.Close(); 
      reader.Dispose(); 

      comandoFoxPro.CommandText = 
       "DELETE FROM test WHERE id = 5"; 

      sePudoEjecutarTodo &= (comandoFoxPro.ExecuteNonQuery() > 0); 

      comandoFoxPro.CommandText = 
       "SET EXCLUSIVE ON; PACK test"; 

      sePudoEjecutarTodo &= (comandoFoxPro.ExecuteNonQuery() > 0); 
     } 
     catch(OleDbException oleDbE) 
     { 
      sePudoEjecutarTodo = false; 
      Console.WriteLine(oleDbE.Message); 

     } 
     finally 
     { 
      if (sePudoEjecutarTodo) 
       Console.WriteLine("Congratulaciones si se armo todo"); 
      else 
       Console.WriteLine("Pelas"); 

      conexionFoxPro.Close(); 
      Console.ReadKey(); 
     } 

j'ai une base de données foxpro 9 avec une table test appelé test, et je l'ai testé avec des phrases sql normales et tout va bien, sauf pour l'instruction pack qui supprime physiquement les données de la base de données, je trouve et l'exemple qui me montre comment le faire mais avec un autre lecteur un peu (adodb), mais même si je peux le faire avec ce code je veux savoir comment cela pourrait fonctionner en oledb.

Répondre

7
static void Main(string[] args) 
    { 
    Console.WriteLine("Starting program execution..."); 

    string connectionString = @"Provider=VFPOLEDB.1;Data Source=h:\dave\"; 

    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
     using (OleDbCommand scriptCommand = connection.CreateCommand()) 
     { 
      connection.Open(); 

      string vfpScript = @"SET EXCLUSIVE ON 
           DELETE FROM test WHERE id = 5 
           PACK"; 

      scriptCommand.CommandType = CommandType.StoredProcedure; 
      scriptCommand.CommandText = "ExecScript"; 
      scriptCommand.Parameters.Add("myScript", OleDbType.Char).Value = vfpScript; 
      scriptCommand.ExecuteNonQuery(); 
     } 
    } 

    Console.WriteLine("End program execution..."); 
    Console.WriteLine("Press any key to continue"); 
    Console.ReadLine(); 
    } 
+1

dieu sauve stackoverflow et google! – bigmander

1

Je n'ai jamais remarqué VFP à utiliser; différencier les déclarations BETWEEN. VFP utilise; identifier l'instruction continue sur la ligne suivante (exactement à l'opposé de C# et d'autres langues).

Alors, je changerais le texte de votre commande à la fin de ce qui suit

comandoFoxPro.CommandText = "USE TEST EXCLUSIVE \r\n" 
          "PACK \r\n" 
          "USE \r\n"; 

sePudoEjecutarTodo &= (comandoFoxPro.ExecuteNonQuery() > 0); 
+0

+1 Ceci est une belle solution pour envoyer plusieurs commandes FoxPro via le pilote. Cette solution a-t-elle été testée? – DaveB

+0

@DaveB, je n'ai pas testé, mais c'est similaire à d'autres que j'ai fait dans le passé, comme SQL-Select dans un curseur, puis copier le type d'exportation foxplus ou XLS sans problèmes. @Bigmander est évidemment nouveau avec des points de réputation et pourrait ne pas savoir cocher une réponse si elle a aidé à résoudre son problème. Cela pourrait venir si cela fonctionnait pour lui. – DRapp