在c#

时间:2016-07-05 16:23:14

标签: c# sql sql-server database oracle

好吧我使用了DbClass,所以我可以同时使用Oracle和sql,而不必使用2个不同的dill,我只是通过连接和提供程序即可。 这就是我打开连接的方式:

public class CdpsiUpdateSql : IDisposable
{        
    private DbTransaction _myTransaction;
    bool disposed = false;
    SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true);
    public DbConnection OraConnection { get; set; }

    public CdpsiUpdateSql(string Provider, string connectionString)
    {
        //this.OraConnection = OpenDbConnection(connectionString);
        string constr = connectionString;

            DbProviderFactory factory =
                    DbProviderFactories.GetFactory(Provider);
        DbConnection conn = factory.CreateConnection();
        conn.ConnectionString = constr;
        conn.Open();
        this.OraConnection = conn;

    }

但现在我需要使用该连接执行几个命令(OraConnection),我有另一个执行命令的DLL,我有这个功能:

private bool ExecComando(string comando, CdpsiUpdateSql Updater, string log)
{
    Database db = DatabaseFactory.CreateDatabase();
    string sql = comando;
    DbCommand cmd = db.GetSqlStringCommand(sql);
    cmd.Connection = Updater.OraConnection;
    try
    {
        linhas = cmd.ExecuteNonQuery();
        return false;
    }
    catch (DbException exp)
    {
        Logg("Erro a executar o comando: " + comando, log);
        Logg("Descrição do erro: " + exp.ToString(), log);
        cmd.Dispose();
        return true;
    }
}
  

它抛出一个异常,要求设置一个需要配置文件的DatabaseProviderFactory。   我无法在此找到任何结论,因为当涉及到这个类时,信息真的很糟糕。   如果在测试时我使用了提供程序>" Oracle.ManagedDataAccess.Client"使用第一种方法的连接工作得很好,它连接成功。   我需要用什么来执行命令?   感谢任何帮助,非常感谢

1 个答案:

答案 0 :(得分:2)

在我看来,你根本不需要DatabaseFactory课程。

我认为您可以使用CreateCommand类的DbConnection方法。类似的东西:

var cmd = Updater.OraConnection.CreateCommand();
cmd.CommandText = sql;
...

我认为与私人制定者宣布连接会更好。

public DbConnection OraConnection { get; private set; }

更加优雅和安全。