someone knows how to delete pack foxpro data from oledb driver with c#

最后都变了- 提交于 2019-12-06 07:31:41

问题


this is my code

//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();
        }

i have a database in foxpro 9 with one testing table named test, and i tested with normal sql sentences, and everything is going fine except for the pack statement whom delete data physically from the database, i found and example that shows me how to do it but its with other kinda drive (adodb), but even if i can do it with that code i want to know how could this stuff works in oledb.


回答1:


    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(); 
    }



回答2:


I've never noticed VFP to use ; to differentiate BETWEEN statements. VFP uses ; to identify statement continues on next line (exact opposite of C# and other languages).

So, I would change your command text at the end to the following

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

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


来源:https://stackoverflow.com/questions/4395200/someone-knows-how-to-delete-pack-foxpro-data-from-oledb-driver-with-c-sharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!