代码如下:这个方法有没有什么重大的严重的错误,如连接不能释放等等之类的
暂时不考虑代码写得好不好
public void ExecSql(string sql, List<OracleParameter> parameters, string connectionString)
{
OracleConnection cn = new OracleConnection(connectionString);
try
{
OracleCommand cm = cn.CreateCommand();
cm.CommandText = sql;
if (parameters != null && parameters.Count > 0)
{
foreach (OracleParameter par in parameters)
{
cm.Parameters.Add(par);
}
}
cm.ExecuteNonQuery();
}
catch (OracleException e)
{
throw e;
}
finally
{
cn.Close();
}
}
------解决方案--------------------------------------------------------
OracleConnection
建议换一种写法 因为快过时了
------解决方案--------------------------------------------------------
举个例子吧
- C# code
using System.Data.OleDb;using System.Data.Odbc;using System.Configuration;//方法 public static string GetPK(string TableName) { string pk = ""; string sql = "select " + TableName + ".nextval from dual"; OleDbConnection con = new OleDbConnection(MyConnString); OleDbCommand cmd = new OleDbCommand(sql, con); con.Open(); OleDbDataReader odr = cmd.ExecuteReader(); if (odr.Read()) { pk = odr["NEXTVAL"].ToString(); } con.Close(); return pk; }
------解决方案--------------------------------------------------------
一个建议是链接对象使用using,用完就释放掉。
另外一个有点搞不清楚,返回void的查询有什么用?专门用于创建表,还是专门用于Update?
还有一个,难道使用的时候每次都要传递connectionString?很不方便哦。
------解决方案--------------------------------------------------------
string connectionString
是用来干嘛的?
楼主你还是运行下才知道有没有问题啊
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
贴一个自己封装的 OracleHelper
以楼主的执行增删改为例:
- C# code
/// <summary> /// 数据访问帮助类 /// </summary> public class DBHelper { private OracleConnection _con; /// <summary> /// 连接对象字符串 /// </summary> public OracleConnection con { get { if (_con == null) //从配置文件读取连接字符串 _con = new OracleConnection("Password=tiger;User ID=scott;Data Source=scce"); return _con; } } /// <summary> /// 增加、删除、修改 或存储过程 /// </summary> /// <param name="sql">SQL 语句</param> /// <param name="type">指定SQL语句类型</param> /// <param name="lists">存储过程元素数组,最后一个为传出参数</param> /// <returns>返回结果</returns> public int ExecuteNonQuery(string sql, CommandType type, params OracleParameter[] lists) { //初始化结果 int result = 0; //创建命令对象 OracleCommand cmd = new OracleCommand(); //指定命令对象的连接池 cmd.Connection = con; //指定命令对象的SQL语句 cmd.CommandText = sql; //指定命令对象的类型 cmd.CommandType = type; //如果是存储过程 if (cmd.CommandType == CommandType.StoredProcedure) { //指定最后一个参数为传出参数 lists[lists.Length - 1].Direction = ParameterDirection.Output; //添加元素进存储过程 cmd.Parameters.AddRange(lists); //打开连接 con.Open(); //执行操作 cmd.ExecuteNonQuery(); //获取存储过程传出的值 result = (int)lists[lists.Length - 1].Value; //关闭连接 con.Close(); } //否则默认执行 SQL 语句 else { //打开连接 con.Open(); //获取受影响行数 result = cmd.ExecuteNonQuery(); //关闭连接 con.Close(); } //返回结果 return result; } }//后面其他方法省略。。。