1、关于本文sql
运行本文中的代码,须要数据库
1)须要手动添加引用System.Data.OracleClient函数
在代码最前面加入这句话:using System.Data.OracleClient;工具
2)须要安装 Instant Clientoop
安装 Oracle Instant Client(OCI) 的步骤能够参考这篇文章测试
注:下载32位的OCI库,则在VS中须要选择x86做为目标平台;下载64位的OCI库,则须要选择x64做为目标平台spa
2、工具类OracleHelper代码.net
class OracleHelper { //须要 oci.dll oraociei12.dll oraons.dll /// <summary> /// 协议:默认TCP /// </summary> public static string PROTOCOL = "TCP"; /// <summary> /// 主机地址:默认171.0.0.132 /// </summary> public static string HOST = "171.0.0.132"; /// <summary> /// 端口号:默认1521 /// </summary> public static string PORT = "1521"; /// <summary> /// TNS服务名:默认TESTDB /// </summary> public static string SERVICE_NAME = "TESTDB"; /// <summary> /// 用户名:默认NQ_MON /// </summary> public static string USER_ID = "NQ_MON"; /// <summary> /// 密码:默认NQ_MON /// </summary> public static string PASSWORD = "NQ_MON"; /// <summary> /// 初始化工具类中各项属性 /// </summary> /// <param name="PTC">协议:默认TCP</param> /// <param name="HST">主机地址:默认171.0.0.132</param> /// <param name="PRT">端口号:默认1521</param> /// <param name="SRV">TNS服务名:默认TESTDB</param> /// <param name="UID">用户名:默认NQ_MON</param> /// <param name="PWD">密码:默认NQ_MON</param> public static void InitializeConfig( string PTC = "TCP", string HST = "171.0.0.132", string PRT = "1521", string SRV = "TESTDB", string UID = "NQ_MON", string PWD = "NQ_MON") { PROTOCOL = PTC; HOST = HST; PORT = PRT; SERVICE_NAME = SRV; USER_ID = UID; PASSWORD = PWD; } /// <summary> /// 生成链接字符串 /// </summary> /// <param name="PROTOCOL">协议</param> /// <param name="HOST">主机地址</param> /// <param name="PORT">端口号</param> /// <param name="SERVICE_NAME">TNS服务名</param> /// <param name="USER_ID">用户名</param> /// <param name="PASSWORD">登陆口令</param> /// <returns></returns> public static string GetConnectionString() { return string.Format( "DATA SOURCE= " + " (DESCRIPTION= " + " (ADDRESS_LIST= " + " (ADDRESS= " + " (PROTOCOL={0}) " + " (HOST={1}) " + " (PORT={2}) " + " ) " + " ) " + " (CONNECT_DATA= " + " (SERVICE_NAME={3}) " + " ) " + " ); " + "PERSIST SECURITY INFO=TRUE; " + "USER ID={4}; " + "PASSWORD={5} ", PROTOCOL, HOST, PORT, SERVICE_NAME, USER_ID, PASSWORD); } /// <summary> /// 向数据库中执行命令 /// </summary> /// <param name="sqlExecute">无返回值SQL语句</param> /// <returns>SQL语句影响的行数</returns> public static int ExecuteCommand(string sqlExecute) { int lineschanged = 0; //生成链接字符串 string conn = GetConnectionString(); //读取数据 using (OracleConnection oc = new OracleConnection(conn)) { try { //打开链接 oc.Open(); OracleCommand cmd = oc.CreateCommand(); cmd.CommandText = sqlExecute; lineschanged = cmd.ExecuteNonQuery(); } catch (Exception ex) { //输出异常后抛出 Console.WriteLine("Function ExecuteCommand: " + ex.Message); throw new Exception(ex.Message); } finally { //关闭链接 oc.Close(); } } return lineschanged; } /// <summary> /// 从数据库中查询数据 /// </summary> /// <param name="sqlSearch">查询用SQL语句</param> /// <returns></returns> public static System.Data.DataTable SearchCommand(string sqlSearch) { //返回的DataTable System.Data.DataTable dt = new System.Data.DataTable(); //生成链接字符串 string conn = GetConnectionString(); //读取数据 using (OracleConnection oc = new OracleConnection(conn)) { try { //打开链接 oc.Open(); OracleCommand cmd = oc.CreateCommand(); cmd.CommandText = sqlSearch; OracleDataReader odr = cmd.ExecuteReader(); //读取列信息 for (int i = 0; i < odr.FieldCount; i++) { dt.Columns.Add(odr.GetName(i)); } //读取各行存入到DataTable中 while (odr.Read()) { string[] s = new string[odr.FieldCount]; for (int i = 0; i < odr.FieldCount; i++) { s[i] = odr.GetValue(i).ToString(); } dt.Rows.Add(s); } } catch (Exception ex) { //输出异常后抛出 Console.WriteLine("Function SearchCommand: " + ex.Message); throw new Exception(ex.Message); } finally { //关闭链接 oc.Close(); } } return dt; } }
3、Main函数调用示例线程
namespace OracleTest { class Program { /// <summary> /// 执行查询SQL语句示例 /// </summary> public static void SearchTest() { //查询内容 Console.WriteLine("执行SEARCH语句"); System.Data.DataTable dt = OracleHelper.SearchCommand( "SELECT CURR_DATE, CURR_TIME FROM MONCRITEVENT WHERE ROWNUM <= 10"); //输出查询结果 Console.WriteLine("输出查询结果"); for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { Console.Write(dt.Rows[i][j].ToString()); Console.Write('\t'); } Console.WriteLine(); } } /// <summary> /// 执行非查询SQL语句示例 /// </summary> public static void CommandTest() { //执行SQL语句 Console.WriteLine("执行UPDATE语句"); int lineschanged = OracleHelper.ExecuteCommand( "UPDATE MONCRITEVENT SET CURR_DATE = 9999 WHERE CURR_DATE = 9999"); Console.WriteLine("受影响的行数:" + lineschanged); } /// <summary> /// 循环发送Search语句并返回 /// </summary> /// <param name="second">每次收发数据间隔时间</param> public static void SearchLoopTest(object second) { while (true) { SearchTest(); System.Threading.Thread.Sleep(int.Parse(second.ToString())); } } static void Main(string[] args) { SearchTest(); //执行查询SQL语句示例 Console.WriteLine("--------"); CommandTest(); //执行非查询SQL语句示例 Console.WriteLine("--------"); //压力测试,执行时能够打开任务管理器辅助检测程序运行情况 //每0.2秒发送一次,分10个线程发送 /* (new System.Threading.Thread(SearchLoopTest)).Start(2000); //1 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //2 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //3 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //4 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //5 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //6 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //7 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //8 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //9 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //10 * */ Console.ReadLine(); } } }
4、运行截图code
END