C# 在C中使用Oracle删除/创建序列#
当我试着像运行任何其他事务一样运行C# 在C中使用Oracle删除/创建序列#,c#,oracle,oracle10g,oracle-manageddataaccess,C#,Oracle,Oracle10g,Oracle Manageddataaccess,当我试着像运行任何其他事务一样运行删除序列名(插入、更新、删除)时,它不起作用。如何从C#程序中删除并创建序列 这是密码 public static bool executeQuery(string query) { bool success = false; DBConnection db = new DBConnection(); db.Connect(); if (db.GetConnectionState(
删除序列名
(插入、更新、删除
)时,它不起作用。如何从C#程序中删除并创建序列
这是密码
public static bool executeQuery(string query)
{
bool success = false;
DBConnection db = new DBConnection();
db.Connect();
if (db.GetConnectionState())
{
db.SetSql(query);
if (db.ExecuteTransactions())
success = true;
else
success = false;
}
else
success = false;
return success;
}
以及DBConnection类中的方法ExecuteTransactions()
和SetSql()
private OracleConnection connection;
private OracleCommand command;
private bool autoDisconnect;
public bool ExecuteTransactions()
{
OracleTransaction transaction = null;
bool success = false;
try
{
transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
command.Connection = connection;
command.Transaction = transaction;
if (command.ExecuteNonQuery() > 0)
{
transaction.Commit();
success = true;
}
else
{
transaction.Rollback();
success = false;
}
}
catch (Exception ex)
{
success = false;
autoDisconnect = true;
throw new Exception(ex.ToString());
}
//Cleaning
finally
{
if (transaction != null)
{
transaction.Dispose();
}
if (autoDisconnect)
{
if (command.Parameters.Count > 0)
{
foreach (OracleParameter pram in command.Parameters)
{
if (pram.Direction != ParameterDirection.ReturnValue)
pram.Dispose();
}
}
if (command != null)
{
command.Dispose();
}
Dispose();
}
}
return success;
}
public void SetSql(string sql)
{
command = new OracleCommand(sql);
command.BindByName = true;
}
我不确定问题是否出在SetSql()
方法上,因为drop sequence
不是OracleCommand?或者如果它是ExecuteTransactions()
方法,则在if(command.ExecuteNonQuery()>0)行的某个位置
谢谢大家!
编辑:这是错误
An exception of type 'System.Exception' occurred in TDS1.exe but was not handled in user code
Additional information: System.InvalidOperationException: OracleCommand.CommandText is invalid
at Oracle.ManagedDataAccess.Client.OracleCommand.DoPreExecuteProcessing(OracleDependencyImpl orclDependencyImpl, Boolean bXmlQuerySave)
at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
在if(command.ExecuteNonQuery>0)
行中,我从未尝试过C#中的DDL,但我确实有这样一个随机想法:尝试将DDL包装在一个执行立即数(动态SQL)中,如下所示:查询:=“执行立即数‘drop sequence name’;请注意,DDL在DDL之前和之后都执行隐式提交,因此,如果在尝试回滚时尝试将DDL与其他DML语句组合,则可能会产生副作用。此外,“它不工作”不是一个有效的Oracle或C#错误。。。因此,在将来,请提供错误(如果适用)或没有返回错误时的行为。@kris,请检查编辑,我已经包含了错误消息“我从未尝试过C#中的DDL”,但我有一个随机的想法:尝试将DDL包装在一个立即执行(动态SQL)中,如下所示:query:=“execute immediate‘drop sequence name’”;请注意,DDL在DDL之前和之后执行隐式提交,因此在尝试回滚时,如果尝试将DDL与其他DML语句结合使用,可能会产生副作用。此外,“它不工作”不是有效的Oracle或C错误……因此,今后请提供错误(如果适用)或没有返回错误时的行为。@克里斯,请检查编辑,我已经包含了错误消息