1 连接Sql Server的ConnectionString:

Data Source=.;Initial Catalog=ViewVideo;User ID=sa;Password=XXXXXX;

2 连接MySql的ConnectionString:

Database=dbname;Data Source=192.168.1.1;Port=3306;User Id=root;Password=****;Charset=utf8;TreatTinyAsBoolean=false;

3 连接Oracle的ConnectionString:

Data Source=(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.117)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.192.168.1.117)
)
);User Id=scott;Password=XXXXXX //不能有';'

OracleHelper.cs:

 public class OracleHepler
{
//链接字符串
private static readonly string connStr = ConfigurationManager.ConnectionStrings["dbconnStr"].ConnectionString; /// <summary>
/// 创建链接
/// </summary>
/// <returns>链接</returns>
public static OracleConnection CreateConnection()
{
OracleConnection conn = new OracleConnection(connStr);
conn.Open();
return conn;
} /// <summary>
/// 使用亦有链接的 非查询
/// </summary>
/// <param name="conn">链接</param>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>受影响行数</returns>
public static int ExecuteNonQuery(OracleConnection conn, string sql, params OracleParameter[] parameters)
{
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteNonQuery();
}
} /// <summary>
/// 自己创建链接的 非查询
/// </summary>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>受影响行数</returns>
public static int ExecuteNonQuery(string sql, params OracleParameter[] parameters)
{
using (OracleConnection conn = CreateConnection())
{
return ExecuteNonQuery(conn, sql, parameters);
}
} /// <summary>
/// 使用已有链接的 带存储过程的Insert非查询,直接写存储过程参数
/// </summary>
/// <param name="conn">已有链接</param>
/// <param name="proName">存储过程名称</param>
/// <param name="strInsertSQL">执行插入的sql语句,或者其他操作sql语句</param>
/// <param name="seqName">序列的名称</param>
/// <returns>当前序列号,即ID</returns>
public static object ExecuteNonQueryWithProduce(OracleConnection conn, string proName, string strInsertSQL, string seqName)
{
using (OracleCommand cmd = new OracleCommand(proName, conn)) //命令中执行的不在是sql,而是存储过程
{
try
{
cmd.CommandType = CommandType.StoredProcedure; //标记该命令的类型不是sql,而是存储过程
//存储过程中有参数名称,以及设置对应参数的值
cmd.Parameters.Add(new OracleParameter("strInsertSQL", OracleDbType.Varchar2) { Value = strInsertSQL }); ////存储过程中的参入参数 strInsertSQL
cmd.Parameters.Add(new OracleParameter("seqName", OracleDbType.Varchar2) { Value = seqName }); // //存储过程中的传入参数 seqName
cmd.Parameters.Add(new OracleParameter("ID", OracleDbType.Int32) { Direction = ParameterDirection.Output }); //存储过程中的传出参数ID,只需要声明
//cmd.Parameters.AddRange(parameters);
cmd.ExecuteNonQuery();
string newId = cmd.Parameters["ID"].Value.ToString(); //获得传出参数的ID的值
return newId;
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
} /// <summary>
/// 自己创建链接的 带存储过程的Insert非查询,直接写存储过程参数
/// </summary>
/// <param name="proName">存储过程名称</param>
/// <param name="strInsertSQL">执行插入的sql语句,或者其他操作sql语句</param>
/// <param name="seqName">序列的名称</param>
/// <returns>当前序列号,即ID</returns>
public static object ExecuteNonQueryWithProduce(string proName, string strInsertSQL, string seqName)
{
using (OracleConnection conn = CreateConnection())
{
return ExecuteNonQueryWithProduce(conn, proName, strInsertSQL, seqName);
}
} /// <summary>
/// 使用已有链接的 带存储过程的Insert非查询,传存储过程参数
/// </summary>
/// <param name="conn">已有链接</param>
/// <param name="proName">存储过程名称</param>
/// <param name="parameters">存储过程中的传入、传出参数 数组</param>
/// <returns>当前序列号,即ID</returns>
public static object ExecuteNonQueryWithProduce(OracleConnection conn, string proName, params OracleParameter[] parameters)
{
using (OracleCommand cmd = new OracleCommand(proName, conn)) //命令中执行的不在是sql,而是存储过程
{
//try
//{
cmd.CommandType = CommandType.StoredProcedure; //标记该命令的类型不是sql,而是存储过程
////存储过程中有参数名称,以及设置对应参数的值
//cmd.Parameters.Add(new OracleParameter("strInsertSQL", OracleDbType.Varchar2) { Value = strInsertSQL }); ////存储过程中的参入参数 strInsertSQL
//cmd.Parameters.Add(new OracleParameter("seqName", OracleDbType.Varchar2) { Value = seqName }); // //存储过程中的传入参数 seqName
//cmd.Parameters.Add(new OracleParameter("ID", OracleDbType.Int32) { Direction = ParameterDirection.Output }); //存储过程中的传出参数ID,只需要声明
cmd.Parameters.AddRange(parameters); //参数中包括存储过程的传入传出参数,以及子sql语句中的参数 --------------****-----------------
int i = cmd.ExecuteNonQuery(); //直接返回执行插入之后,存储过程传出的变量值
object newId = cmd.Parameters["ID"].Value; //获得传出参数的ID的值
return newId;
//}
//catch (Exception ex)
//{
// throw new Exception(ex.ToString());
//}
}
} /// <summary>
/// 自己创建链接的 带存储过程的Insert非查询,传存储过程参数
/// </summary>
/// <param name="proName">存储过程名称</param>
/// <param name="parameters">存储过程中的传入、传出参数 数组</param>
/// <returns>当前序列号,即ID</returns>
public static object ExecuteNonQueryWithProduce(string proName, params OracleParameter[] parameters)
{
using (OracleConnection conn = CreateConnection())
{
return ExecuteNonQueryWithProduce(conn, proName, parameters);
}
} /// <summary>
/// 使用已有链接的 单查询
/// </summary>
/// <param name="conn">链接</param>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>查询到的一条结果</returns>
public static object ExecuteScalar(OracleConnection conn, string sql, params OracleParameter[] parameters)
{
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteScalar();
}
} /// <summary>
/// 自己创建链接的 单查询
/// </summary>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>查询到的一条结果</returns>
public static object ExecuteScalar(string sql, params OracleParameter[] parameters)
{
using (OracleConnection conn = CreateConnection())
{
return ExecuteScalar(conn, sql, parameters);
}
} /// <summary>
/// 使用已有链接的 reader查询
/// </summary>
/// <param name="conn">链接</param>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>查询到的结果集table</returns>
public static DataTable ExecuteReader(OracleConnection conn, string sql, params OracleParameter[] parameters)
{
DataTable table = new DataTable();
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
cmd.Parameters.AddRange(parameters);
using (OracleDataReader reader = cmd.ExecuteReader())
{
table.Load(reader);
}
}
return table;
} /// <summary>
/// 自己创建链接的 reader查询
/// </summary>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>查询到的结果集table</returns>
public static DataTable ExecuteReader(string sql, params OracleParameter[] parameters)
{
using (OracleConnection conn = CreateConnection())
{
return ExecuteReader(conn, sql, parameters);
}
} /// <summary>
/// 使用已有链接的 stream查询
/// </summary>
/// <param name="conn">链接</param>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>查询到的结果流stream</returns>
public static System.IO.Stream ExecuteStream(OracleConnection conn, string sql, params OracleParameter[] parameters)
{
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
cmd.Parameters.AddRange(parameters);
using (System.IO.Stream stream = cmd.ExecuteStream())
{
return stream;
}
}
} /// <summary>
/// 自己创建链接的stream查询
/// </summary>
/// <param name="sql">sql文本</param>
/// <param name="parameters">sql参数</param>
/// <returns>查询到的结果流stream</returns>
public static System.IO.Stream ExecuteStream(string sql, params OracleParameter[] parameters)
{
using (OracleConnection conn = CreateConnection())
{
return ExecuteStream(conn, sql, parameters);
}
}
}

OracleHelper.cs

DbHelper.cs

 public class DbHelper
{
private static readonly string connStr = ConfigurationManager.ConnectionStrings["dbconnStr"].ConnectionString; //创建连接
public static IDbConnection CreateConnection()
{
IDbConnection conn = new OracleConnection(connStr);
conn.Open();
return conn;
} //把字典中的参数都加入到cmd得参数集合中
public static void DictAddToCmdParameters(IDbCommand cmd,Dictionary<string,object> dict)
{
foreach(KeyValuePair<string,object> kvp in dict)
{
IDataParameter parameters = cmd.CreateParameter();
parameters.ParameterName = kvp.Key;
parameters.Value = kvp.Value;
cmd.Parameters.Add(parameters);
}
} //使用已有连接的 非查询
public static int ExecuteNonQuery(IDbConnection conn,string sql,Dictionary<string,object> dict)
{
using(IDbCommand cmd=conn.CreateCommand())
{
cmd.CommandText = sql;
DictAddToCmdParameters(cmd, dict);
return cmd.ExecuteNonQuery();
}
} //使用已有连接的 非查询 带事务处理
public static int ExecuteNonQuery(IDbConnection conn,IDbTransaction tx,string sql,Dictionary<string,object> dict)
{
using(IDbCommand cmd=conn.CreateCommand())
{
cmd.Transaction = tx;
cmd.CommandText = sql;
DictAddToCmdParameters(cmd, dict);
return cmd.ExecuteNonQuery();
}
} //自己创建连接的 非查询
public static int ExecuteNonQuery(string sql,Dictionary<string,object> dict)
{
using(IDbConnection conn=CreateConnection())
{
return ExecuteNonQuery(sql,dict);
}
} //使用已有连接的 单查询
public static object ExecuteScalar(IDbConnection conn,string sql,Dictionary<string,object> dict)
{
using(IDbCommand cmd=conn.CreateCommand())
{
cmd.CommandText = sql;
DictAddToCmdParameters(cmd, dict);
return cmd.ExecuteScalar();
}
} //自己创建连接的 单查询
public static object ExecuteScalar(string sql,Dictionary<string,object> dict)
{
using(IDbConnection conn=CreateConnection())
{
return ExecuteScalar(conn, sql, dict);
}
} //使用已有连接的 Reader查询
public static DataTable ExecuteReader(IDbConnection conn,string sql,Dictionary<string,object> dict)
{
DataTable table = new DataTable();
using(IDbCommand cmd=conn.CreateCommand())
{
cmd.CommandText = sql;
DictAddToCmdParameters(cmd, dict);
using (IDataReader reader = cmd.ExecuteReader())
{
table.Load(reader);
}
}
return table;
} //自己创建连接的 Reader查询
public static DataTable ExecuteReader(string sql,Dictionary<string,object> dict)
{
using(IDbConnection conn=CreateConnection())
{
return ExecuteReader(conn, sql, dict);
}
} //使用已有连接的 DataAdapter查询
public static DataTable ExecuteDataAdapter(IDbConnection conn,string sql,Dictionary<string,object> dict)
{
using(IDbCommand cmd=conn.CreateCommand())
{
cmd.CommandText = sql;
DictAddToCmdParameters(cmd, dict);
IDataAdapter adapter = GetDataAdapter(cmd);//获得查询的数据库结果
DataSet dataset = new DataSet();
adapter.Fill(dataset);
return dataset.Tables[];
}
} //自己创建连接的 DataAdapter查询
public static DataTable ExecuteDataAdapter(string sql,Dictionary<string,object> dict)
{
using(IDbConnection conn=CreateConnection())
{
return ExecuteDataAdapter(conn, sql, dict);
}
} //获得查询到的数据库结果
private static IDataAdapter GetDataAdapter(IDbCommand cmd)
{
IDataAdapter adapter;//DataAdapter的访问限制为protected,不能new
if (cmd is OracleCommand)//需引用Oracle.DataAccess.Client
{
OracleCommand oracmd = cmd as OracleCommand;
adapter = new OracleDataAdapter(oracmd);
}
//else if (cmd is MySqlCommand)//需引用mysql.data.client
//{
// MySqlCommand mycom = cmd as MySqlCommand;
// adapter = new MySqlDataAdapter(mycom);
//}
else if (cmd is SqlCommand)//需引用System.Data.SqlClient;
{
SqlCommand sqlcom = cmd as SqlCommand;
adapter = new SqlDataAdapter(sqlcom);
}
else
{
throw new Exception("需要其他数据库的DataAdapter");
}
return adapter;
} /// <summary>
/// 执行SqlBulkCopy或OracleBulkCopy批量拷贝,传入一个实体的公共类型,约定其属性名与DB中列名相同
/// </summary>
/// <param name="type"></param>
/// <returns>返回该类型对应的表的架构</returns>
public static DataTable ExecuteBulkCopy(Type type)
{
//创建表的架构
DataTable table = new DataTable();
DataColumn column = new DataColumn();
//Type type = typeof(Person);//传入实体类Person
PropertyInfo[] properties = type.GetProperties();
//创建表的列
foreach (PropertyInfo property in properties)
{
column.ColumnName = property.Name;
column.DataType = property.PropertyType;
table.Columns.Add(column);
}
return table;
} /// <summary>
/// 遍历: 把每个数据中数据依次填充到该表的row中
/// </summary>
/// <param name="table"></param>
/// <param name="type"></param>
/// <param name="line"></param>
/// <returns>返回填充了一行数据的表</returns>
public static DataTable RowAddTable(DataTable table, Type type, string[] line)//line中个数必须与列数量相同
{
//填入表的行
DataRow row = table.NewRow();
PropertyInfo[] properties = type.GetProperties();
int i = ;
foreach (PropertyInfo property in properties)//属性名对应列名
{
row[property.Name] = line[i];
i++;
}
table.Rows.Add(row);
return table;
} /// <summary>
/// 把当前表写入目标表(目标表和当前表列名相同)
/// </summary>
/// <param name="destTableName"></param>
/// <param name="currentTabele"></param>
public static bool BulkCopyMapping(string destTableName, DataTable currentTabele)
{
bool falg = false;
//using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr))
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(connStr))//oracle在这里不能用事务,sql server可以
{ bulkCopy.DestinationTableName = destTableName;
foreach (DataColumn column in currentTabele.Columns)
{
bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);//目标表和当前表列名相同
}
try
{
bulkCopy.WriteToServer(currentTabele);//把当前表写入目标表
falg = true;
}
catch (Exception ex)
{
falg = false;
throw new Exception(ex.ToString());
}
}
return falg;
}
}
class Person//BulkCopy直接传了Type所以没用到
{
public int Id{get;set;}
public string Name{get;set;}
}

DbHelper.cs

DbHelper and OracleHelper的更多相关文章

  1. OracleHelper数据库事务处理

    原理:需要开启事务的Action贴上Transaction标签,则Action执行前开启事务,Action执行完提交事务,如果Action报错,则回滚事务. OracleHelper代码: using ...

  2. 职责链模式(chain of responsibility)

    一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所 ...

  3. 重温设计模式(三)——职责链模式(chain of responsibility)

    一. 写在前面的 这么多的设计模式,我觉得职责链是我第一次看上去最简单,可是回想起来却又最复杂的一个模式. 因此,这个文章我酝酿了很久,一直也没有胆量发出来,例子也是改了又改,可是仍然觉得不够合理.所 ...

  4. wcf调用oracle存储过程

    public IList<ACCP_RAIN> QueryAll(string beginTime, string endTime, string type) { beginTime = ...

  5. 我也来写:数据库访问类DBHelper

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  6. 我也来写:数据库访问类DBHelper(转)

    一.前言 相信许多人都百度过:“.net 数据库访问类”.然后就出来一大堆SqlHelper.我也用过这些SqlHelper,也自己写过,一堆静态方法,开始使用起来感觉很不错,它们也确实在很多时候可以 ...

  7. 关于SqlServer的DBHelper类以及数据分页

    前端: <My:AspNetPager class="arPage" PageSize="20" UrlPaging="true" r ...

  8. c# 轻量级 ORM 框架 之 DBHelper 实现 (三)

    周末了比较清闲,把自己的orm框架整理了下,开源了. 已经做出来的东西通常感觉有些简单,一些新手或许听到"框架"一类的词觉得有些"高深",简单来说orm就是把a ...

  9. c#连接oracle数据库 DBHelper

    闲着没事自己写了一个OracleHelper类,希望大神给点建议优化 using System; using System.Collections.Generic; using System.Linq ...

随机推荐

  1. Oracle查看用户所在表空间

    查看当前用户所在表空间 select username,default_tablespace from user_users; 修改用户默认表空间 alter user 用户名 default tab ...

  2. objective-C 中两种实现动画的方法(转)

     转发自:http://wayne173.iteye.com/blog/1250232 第一种方法: [UIView beginAnimations:@"Curl"context: ...

  3. IntPtr

    一:什么是IntPtr 先来看看MSDN上说的:用于表示指针或句柄的平台特定类型.这个其实说出了这样两个事实,IntPtr 可以用来表示指针或句柄.它是一个平台特定类型.对于它的解释,这个哥们写的比较 ...

  4. SSL与TLS的区别以及介绍

    转载 :http://kb.cnblogs.com/page/197396/ SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议 ...

  5. 1202: [HNOI2005]狡猾的商人 - BZOJ

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  6. 贪心算法——将正整数变为1

    题目链接http://toutiao.com/a6320936270101528833/ 为避免链接失效,再粘贴一下题目内容: 给你一个数n,有3种操作: 1.这个数加1 2.这个数减1 3.如果这个 ...

  7. 《Publish or Perish》——从某种角度来说,我们也算和世界同步了呢。

  8. call && jmp 指令

    对于jmp指令: (1)jmp short 标号相当于(ip)=(ip)+8位位移 跳转范围是[-128,127](2)jmp near ptr 标号相当于(ip)=(ip)+16位位移 跳转范围是[ ...

  9. chardet安装

    1.下载 chardet-2.2.1.tar.gz (md5)   https://pypi.python.org/pypi/chardet#downloads 2.解压至C:\Python27\Li ...

  10. 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换

    本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下:    #ifndef USE_H_     ...