[散分]大家贴出C#操作各种数据库的helper类,供使用时查看
rt --------------------编程问答-------------------- --------------------编程问答-------------------- Oracle:using System;--------------------编程问答--------------------
using System.Collections.Generic;
using System.Text;
using System.Data;
using Devart.Data;
using Devart.Data.Oracle;
using System.Web.Configuration;
using System.Configuration;
/// <summary>
/// 对oracle数据库的相关操作
/// 注意命名空间: Devart.Data.Oracle;
/// </summary>
public class OracleHelper
{
/// <summary>
/// 数据库连接字符串
/// </summary>
public static readonly string ConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();
#region 执行sql之增,删,改操作
/// <summary>
/// 执行ExecuteNonQuery sql之增,删,改操作
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">操作类型:
/// CommandType.StoredProcedure为存储过程;
/// CommandType.Text为普通sql语句;
/// </param>
/// <param name="commandText">sql语句或存储过程名称</param>
/// <returns></returns>
public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText)
{
return ExecuteNonQuery(connection, commandType, commandText, (OracleParameter[])null);
}
/// <summary>
/// 执行ExecuteNonQuery sql之增,删,改操作
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">操作类型:
/// CommandType.StoredProcedure为存储过程;
/// CommandType.Text为普通sql语句;
/// </param>
/// <param name="commandText">sql语句或存储过程名称</param>
/// <param name="commandParameters">参数</param>
/// <returns></returns>
public static int ExecuteNonQuery(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
{
if (connection == null)
throw new ArgumentNullException("connection对象为null");
int result = -1;
OracleCommand cmd = new OracleCommand();
try
{
connection.Open();
cmd.Connection = connection;
cmd.CommandText = commandText;
cmd.CommandType = commandType;
if (commandParameters != null)//参数不为空
cmd.Parameters.AddRange(commandParameters);
//对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。
//对于 CREATE TABLE 和 DROP TABLE 语句,返回值为 0。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值同样为 -1
result = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
finally
{
cmd.Dispose();
connection.Close();
}
return result;
}
#endregion
#region 执行查询,返回DataSet
/// <summary>
/// 执行查询,返回DataSet
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">操作类型:
/// CommandType.StoredProcedure为存储过程;
/// CommandType.Text为普通sql语句;
/// </param>
/// <param name="commandText">sql语句或存储过程名称</param>
/// <returns>结果集,DataSet</returns>
public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText)
{
return ExecuteDataset(connection, commandType, commandText, (OracleParameter[])null);
}
/// <summary>
/// 执行查询,返回DataSet
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">操作类型:
/// CommandType.StoredProcedure为存储过程;
/// CommandType.Text为普通sql语句;
/// </param>
/// <param name="commandText">sql语句或存储过程名称</param>
/// <param name="commandParameters">参数</param>
/// <returns>结果集,DataSet</returns>
public static DataSet ExecuteDataset(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
{
if (connection == null)
throw new ArgumentNullException("connection对象为null");
DataSet ds = new DataSet();
OracleCommand cmd = new OracleCommand();
try
{
connection.Open();
cmd.Connection = connection;
cmd.CommandText = commandText;
cmd.CommandType = commandType;
if (commandParameters != null)
cmd.Parameters.AddRange(commandParameters);
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(ds, "table");
}
finally
{
cmd.Dispose();
connection.Close();
}
return ds;
}
#endregion
#region 执行查询,返回DataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
/// <summary>
/// 执行查询,返回DataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">操作类型:
/// CommandType.StoredProcedure为存储过程;
/// CommandType.Text为普通sql语句;
/// </param>
/// <param name="commandText">sql语句或存储过程名称</param>
/// <returns></returns>
public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText)
{
return ExecuteReader(connection, commandType, commandText, (OracleParameter[])null);
}
/// <summary>
/// 执行查询,返回DataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">操作类型:
/// CommandType.StoredProcedure为存储过程;
/// CommandType.Text为普通sql语句;
/// </param>
/// <param name="commandText">sql语句或存储过程名称</param>
/// <param name="commandParameters">参数</param>
/// <returns></returns>
public static OracleDataReader ExecuteReader(OracleConnection connection, CommandType commandType, string commandText, params OracleParameter[] commandParameters)
{
if (connection == null)
throw new ArgumentNullException("connection对象为null");
connection.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;
cmd.CommandText = commandText;
cmd.CommandType = commandType;
if (commandParameters != null)
cmd.Parameters.AddRange(commandParameters);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
#endregion
#region 执行多条SQL语句,实现数据库事务
/// <summary>
/// 执行多条SQL语句,实现数据库事务
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="sqls">多条SQL语句</param>
public static void ExecuteBatchBySqls(OracleConnection connection, List<string> sqls)
{
if (connection == null)
throw new ArgumentNullException("connection对象为null");
OracleTransaction tx = null;
OracleCommand cmd = new OracleCommand();
try
{
connection.Open();
cmd.Connection = connection;
//开始事务
tx = connection.BeginTransaction();
cmd.Transaction = tx;
foreach (string sql in sqls)
{
if (sql.Trim().Length > 1)
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
//提交事务
tx.Commit();
}
catch (Exception ex)
{
//事务回滚
tx.Rollback();
throw new Exception(ex.Message);
}
finally
{
cmd.Dispose();
connection.Close();
}
}
#endregion
}
这个我是用的dev的控件,所以是Devart.Data.Oracle --------------------编程问答-------------------- LZ,如果数据数据连接超时什么办呢?现在我也有个难题,连接超时不知道如何捕获,
难道设置timeout大点?这种方式很多人说,但一直超时应该如何知道? --------------------编程问答-------------------- 有散分。。 --------------------编程问答--------------------
但一直超时应该如何知道?
一直超时?? --------------------编程问答--------------------
总之就是一直连不上,使程序死掉,像进入死循环一样,刚刚遇到这个问题,现在在找方法,但也没找到,
如果能判断10秒钟内连不上就好了,像找开网页一样,有连接超时的页面。
但并不是说像网络不稳定、账号密码错误等,这样的错误try ... catch 就能捕获了
--------------------编程问答-------------------- 至于如果测试一直超时,我也不知道如何下手,就是刚刚出现这样的问题,叫马上解决,但如何模拟真想不出,把网络断开等操作并不会出现刚才的情况,我想是因为数据出现什么异常,使链接一直卡在那里不能连但又出不来,这也只是我的想法,具体什么样,搞不清楚
其实我只是想如果10秒没反应我就在程序里做处理就好,但代码如果写?
--------------------编程问答-------------------- 有人说是微软提供的 是真是假我也不知道 --------------------编程问答-------------------- --------------------编程问答-------------------- 微软企业库
超时,检查SQL
http://topic.csdn.net/u/20091019/10/4eb4f2d4-0cb6-49ce-abc5-a135ac6b733d.html --------------------编程问答-------------------- 关注 学习中。。。
补充:.NET技术 , C#