【问题标题】:someone knows how to delete pack foxpro data from oledb driver with c#有人知道如何使用 c# 从 oledb 驱动程序中删除包 foxpro 数据
【发布时间】:2010-12-09 05:35:03
【问题描述】:

这是我的代码

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

我在 foxpro 9 中有一个数据库,其中有一个名为 test 的测试表,我用普通的 sql 语句进行了测试,除了 pack 语句从数据库中物理删除数据之外,一切都很好,我发现了一个例子如何做到这一点,但它与其他类型的驱动器(adodb),但即使我可以用那个代码来做到这一点,我想知道这些东西如何在 oledb 中工作。

【问题讨论】:

    标签: c# oledb foxpro


    【解决方案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】:

      我从未注意到要使用 VFP ;区分 BETWEEN 语句。 VFP 使用 ;识别语句在下一行继续(与 C# 和其他语言完全相反)。

      所以,我会将您最后的命令文本更改为以下内容

      comandoFoxPro.CommandText = "USE TEST EXCLUSIVE \r\n"
                                  "PACK \r\n"
                                  "USE \r\n";
      
      sePudoEjecutarTodo &= (comandoFoxPro.ExecuteNonQuery() > 0);  
      

      【讨论】:

      • +1 这是通过驱动程序发送多个 FoxPro 命令的好方法。此解决方案是否经过测试?
      • @DaveB,我没有测试过,但它与我过去做过的其他类似,例如SQL-Select进入游标,然后复制类型foxplus或XLS导出类型没有问题。 @Bigmander 显然是新的信誉点,如果它有助于解决他的问题,可能不知道检查答案。如果它确实对他有用,那可能会到来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多