zoukankan      html  css  js  c++  java
  • oracle常见为题汇总,以及一个简单数据连接操作工厂

    本人软件环境:win8.1 64位操作系统,vs2013,安装好了与oracle数据库对应的客户端

                  连接oracle数据库、以及操作数据库

    1.使用IIS建立网站,浏览网页时候,提示“未在本地计算机上注册“MSDAORA”提供程序

    解决方案: 在本机IIS中,对应自己的网站程序,找到相应的网站应用池,高级设置→启用32位应用程序→true,即可,当然也可以设置全部的应用池程序。

    如果是winform或者wpf,请将项目中的属性 cpu类型选择为x86即可

    2.浏览网页时候“ORA-06413: 连接未打开

    主要原因 :oracle 连接数据库的程序所在的物理路径是不允许有特殊字符的;

      vs系列在windows OS 64位版本下安装时,默认x86程序会安装至program files ( x86 ) ,当然这个“()”,就会引起此问题,深入理解一下:原来在项目中运行web程序,所使用的是VS默认内置web服务器(develop server,现在是IIS express server),而这个内置服务器的程序被安装在了c:/program files(x86)/common files/ 下面,这里用到了"(",因此造成了错误。(winform程序,暂未测试,但是主要原因,是这个问题。)

    解决方案:2.1.修改vs系列的安装目录,主要是指安装过程中需要注意,如果安装好了,最好还是别改了。太麻烦了

      2.2.修改这个内置server的安装路径,然后把VS中(项目→属性→web→服务器→服务器指向)服务器指向改成自己定义的,暂时没找到怎么执行自定义的

      2.3.所以这里只用了一个方法绕开内置server。那就是使用本机IIS来调试程序。在解决方案中,选中web项目点右键选属性(项目→属性→web→服务器),在web标签下可以把调试服务器改为“本机iis”。这时候再调试web程序,结果会出现“未在本地计算机上注册“MSDAORA”提供程序”,晕,原来是64位的IIS,怎么办,(设置全部的应用池程序,启用32位支持)打开IIS,点击应用池程序,在操作界面右侧,设置应用程序池默认设置,启用32位应用程序→true,即可,连接数据库成功了。

    这个爽了吧,调试什么的都莫有问题。

    3.DOS使用sqlplus连接oracle数据库时候,出现“ORA-12560: TNS: 协议适配器错误

    解决方案:可能是先输入用户名,在密码方式进入的,然后服务器有多个数据库实例,权限不一致所导致, 可以使用指定具体某一个数据库的方式进入:

      cmd> sqlplus 用户名/密码@数据库名称 例如:sqlplus system/shine@puren

    4.浏览网页时候,提示"未找到oracle 客户端和网络组件"问题

    详解: 找到ORACLE_HOME文件夹,右击—〉属性—〉安全,选Authenticated Users,查看它的属性,将Read and Execute的勾先去掉(默认情况下该勾是选中的),在勾上,然后重新启动你的机器,在运行程序,

      未安装的话:请查看: http://www.cnblogs.com/yylp521/archive/2012/04/09/2438676.html

    5.未选定行

    其实是:没有数据 ,主要是使用PL/SQL 在非查询操作,时候需要使用commit提交。

    6.提供一个简单多数据库连接操作类(mssqlerver、oracle、mysql)

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Data;
     4 using System.Data.Common;
     5 using System.Linq;
     6 using System.Web;
     7 using System.Xml;
     8 using MySql.Data.MySqlClient;
     9 
    10 namespace WebApp
    11 {
    12     public class DBFactory
    13     {
    14         private static DbConnection conn;
    15         private static DbProviderFactory provider = DbProviderFactories.GetFactory(System.Configuration.ConfigurationManager.ConnectionStrings["lihxConnStr"].ProviderName);//Provider
    16         private static string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["lihxConnStr"].ConnectionString;
    17 
    18         public static DbParameter AddFiled(string paramName, object value)
    19         {
    20             DbParameter para = DBFactory.provider.CreateParameter();
    21             para.ParameterName = paramName;
    22             para.Value = value;
    23             return para;
    24         }
    25         public static DbConnection OpenConnection()
    26         {
    27             conn = provider.CreateConnection();
    28             conn.ConnectionString = connStr;
    29             conn.Open();
    30             return conn;
    31         }
    32         public static int ExecuteNonQuery(string cmdText, params DbParameter[] parameters)
    33         {
    34             using (conn = provider.CreateConnection())
    35             {
    36                 conn.ConnectionString = connStr;
    37                 conn.Open();
    38                 return ExecuteNonQuery(conn, cmdText, parameters);
    39             }
    40         }
    41         public static int ExecuteNonQuery(DbConnection conn, string cmdText, params DbParameter[] parameters)
    42         {
    43             using (DbCommand cmd = conn.CreateCommand())
    44             {
    45                 cmd.CommandText = cmdText;
    46                 cmd.Parameters.AddRange(parameters);
    47                 return cmd.ExecuteNonQuery();
    48             }
    49         }
    50 
    51         public static object ExecuteScalar(string cmdText, params DbParameter[] parameters)
    52         {
    53             using (conn = provider.CreateConnection())
    54             {
    55                 conn.ConnectionString = connStr;
    56                 conn.Open();
    57                 return ExecuteScalar(conn, cmdText, parameters);
    58             }
    59         }
    60         public static object ExecuteScalar(DbConnection conn, string cmdText, params DbParameter[] parameters)
    61         {
    62             using (DbCommand cmd = conn.CreateCommand())
    63             {
    64                 cmd.CommandText = cmdText;
    65                 cmd.Parameters.AddRange(parameters);
    66                 return cmd.ExecuteScalar();
    67             }
    68         }
    69 
    70         public static DataTable ExecuteDataTable(string cmdText, params DbParameter[] parameters)
    71         {
    72             using (conn = provider.CreateConnection())
    73             {
    74                 conn.ConnectionString = connStr;
    75                 conn.Open();
    76                 return ExecuteDataTable(conn, cmdText, parameters);
    77             }
    78         }
    79         public static DataTable ExecuteDataTable(DbConnection conn, string cmdText, params DbParameter[] parameters)
    80         {
    81             using (DbCommand cmd = conn.CreateCommand())
    82             {
    83                 cmd.CommandText = cmdText;
    84                 cmd.Parameters.AddRange(parameters);
    85                 cmd.CommandType = CommandType.Text;
    86                 using (DbDataAdapter adapter = provider.CreateDataAdapter())
    87                 {
    88                     adapter.SelectCommand = cmd;
    89                     DataTable dt = new DataTable();
    90                     adapter.Fill(dt);
    91                     return dt;
    92                 }
    93             }
    94         }
    95     }
    96 }
    View Code

    web.config

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <configuration>
     3   <system.web>
     4     <compilation debug="true" targetFramework="4.0">
     5       <!--可以后续添加mysql使用-->
     6       <!--<assemblies>
     7         <add assembly="MySql.Data,Version=6.6.4.0,Culture=neutral,PublicKeyToken=C5687FC88969C44D"/>
     8       </assemblies>-->
     9     </compilation>
    10   </system.web>
    11   <connectionStrings>
    12     <!--<add name="lihxConnStr" connectionString="Data Source=172.168.0.34sqlexpress;Initial CataLog=D:SHINEMDSWEBHQSAPP_DATASHINETRIAGE.MDF;uid=sa;pwd=Shine2008;" providerName="System.Data.SqlClient"/>-->
    13     <add name="lihxConnStr" connectionString="Host=172.168.0.110;Port=1521;Data Source=puren;User Id=system;Password=shine;provider=MSDAORA;" providerName="System.Data.OleDb" />
    14     <!--<add name="lihxConnStr" connectionString="Data Source=172.168.0.234;Initial CataLog=shinetriage;uid=root;pwd=shinevod;" providerName="MySql.Data.MySqlClient"/>-->
    15 
    16   </connectionStrings>
    17   <!--为mysql提供数据工厂-->
    18   <system.data>
    19     <DbProviderFactories>
    20       <add name="MySQL Data Provider" description="ADO.Net driver for MySQL" invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>
    21     </DbProviderFactories>
    22   </system.data>
    23 </configuration>
    View Code

    简单使用

      //添加参数
      List<DbParameter> paraList = new List<DbParameter>();
      paraList.Add(DBFactory.AddFiled("source_id", serialNum));
      //执行sql语句
      DBFactory.ExecuteDataTable(“select  * from patient where source_id=?”,paraList.ToArray());//oracle


      //paraList.Add(DBFactory.AddFiled("@source_id", serialNum));
      //DBFactory.ExecuteDataTable(“select  * from patient where source_id=@source_id”,paraList.ToArray());//mssqlserver

      

      //mysql的忘了,有时间补上

    简单区别

      mssqlserver :不需要引用类库(已内置了),格式化参数使用@参数名

      oracle:需要安装本地客户端,或者下载oracle for net操作类库(安装包越来越大了),也可以使用oledb操作,而原来使用System.Data.Oracle; VS 已不建议使用。 格式化参数用?

      mysql:简单使用的话,直接调用类库,更多关于mysql连接的可以查看: http://www.cnblogs.com/yylp521/p/3173176.html

  • 相关阅读:
    linux date使用
    SHELL输出带颜色字体
    vimrc配置
    你所不知道的C++
    temp
    说什么好呢3
    Extjs3 Combo实现百度搜索查询
    Extjs3笔记 fbar
    Extjs combo赋值与刷新的先后顺序
    sql中nvarchar(max)长度测试
  • 原文地址:https://www.cnblogs.com/bjlhx/p/3489155.html
Copyright © 2011-2022 走看看