2016-07-05 73 views
0

好的我使用了DbClass,因此我可以同時使用Oracle和SQL,而不必使用2個不同的dill,我只需傳遞連接和提供程序即可。 這是我正在打開的連接:在c#中使用DbCommand執行命令#

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」,使用第一種方法的連接工作正常,它會成功連接。 我需要使用什麼來執行命令? 任何幫助表示讚賞,非常感謝你

回答

2

你根本不需要DatabaseFactory類,在我看來。

我認爲您可以使用DbConnection類的CreateCommand方法。像這樣:

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

我認爲這是更好的宣佈與私人setter連接。

public DbConnection OraConnection { get; private set; } 

更加優雅和安全。

+0

我現在會測試它,謝謝 – LikeIfYouCaredAboutMyName

+0

它的工作。我不敢相信這是這麼簡單:o非常感謝你 – LikeIfYouCaredAboutMyName

+0

很高興幫助你! – bastio84