好吧我使用了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"使用第一种方法的连接工作得很好,它连接成功。 我需要用什么来执行命令? 感谢任何帮助,非常感谢
答案 0 :(得分:2)
在我看来,你根本不需要DatabaseFactory
课程。
我认为您可以使用CreateCommand
类的DbConnection
方法。类似的东西:
var cmd = Updater.OraConnection.CreateCommand();
cmd.CommandText = sql;
...
我认为与私人制定者宣布连接会更好。
public DbConnection OraConnection { get; private set; }
更加优雅和安全。