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)
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Web;
using System.Xml;
using MySql.Data.MySqlClient; namespace WebApp
{
public class DBFactory
{
private static DbConnection conn;
private static DbProviderFactory provider = DbProviderFactories.GetFactory(System.Configuration.ConfigurationManager.ConnectionStrings["lihxConnStr"].ProviderName);//Provider
private static string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["lihxConnStr"].ConnectionString; public static DbParameter AddFiled(string paramName, object value)
{
DbParameter para = DBFactory.provider.CreateParameter();
para.ParameterName = paramName;
para.Value = value;
return para;
}
public static DbConnection OpenConnection()
{
conn = provider.CreateConnection();
conn.ConnectionString = connStr;
conn.Open();
return conn;
}
public static int ExecuteNonQuery(string cmdText, params DbParameter[] parameters)
{
using (conn = provider.CreateConnection())
{
conn.ConnectionString = connStr;
conn.Open();
return ExecuteNonQuery(conn, cmdText, parameters);
}
}
public static int ExecuteNonQuery(DbConnection conn, string cmdText, params DbParameter[] parameters)
{
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteNonQuery();
}
} public static object ExecuteScalar(string cmdText, params DbParameter[] parameters)
{
using (conn = provider.CreateConnection())
{
conn.ConnectionString = connStr;
conn.Open();
return ExecuteScalar(conn, cmdText, parameters);
}
}
public static object ExecuteScalar(DbConnection conn, string cmdText, params DbParameter[] parameters)
{
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
cmd.Parameters.AddRange(parameters);
return cmd.ExecuteScalar();
}
} public static DataTable ExecuteDataTable(string cmdText, params DbParameter[] parameters)
{
using (conn = provider.CreateConnection())
{
conn.ConnectionString = connStr;
conn.Open();
return ExecuteDataTable(conn, cmdText, parameters);
}
}
public static DataTable ExecuteDataTable(DbConnection conn, string cmdText, params DbParameter[] parameters)
{
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = cmdText;
cmd.Parameters.AddRange(parameters);
cmd.CommandType = CommandType.Text;
using (DbDataAdapter adapter = provider.CreateDataAdapter())
{
adapter.SelectCommand = cmd;
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}
}
}
web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0">
<!--可以后续添加mysql使用-->
<!--<assemblies>
<add assembly="MySql.Data,Version=6.6.4.0,Culture=neutral,PublicKeyToken=C5687FC88969C44D"/>
</assemblies>-->
</compilation>
</system.web>
<connectionStrings>
<!--<add name="lihxConnStr" connectionString="Data Source=172.168.0.34\sqlexpress;Initial CataLog=D:\SHINEMDS\WEBHQS\APP_DATA\SHINETRIAGE.MDF;uid=sa;pwd=Shine2008;" providerName="System.Data.SqlClient"/>-->
<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" />
<!--<add name="lihxConnStr" connectionString="Data Source=172.168.0.234;Initial CataLog=shinetriage;uid=root;pwd=shinevod;" providerName="MySql.Data.MySqlClient"/>--> </connectionStrings>
<!--为mysql提供数据工厂-->
<system.data>
<DbProviderFactories>
<add name="MySQL Data Provider" description="ADO.Net driver for MySQL" invariant="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data"/>
</DbProviderFactories>
</system.data>
</configuration>
简单使用
//添加参数
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
oracle常见为题汇总,以及一个简单数据连接操作工厂的更多相关文章
- 如何用C++封装一个简单的数据流操作类(附源码),从而用于网络上的数据传输和解析?
历史溯源 由于历史原因,我们目前看到的大部分的网络协议都是基于ASCII码这种纯文本方式,也就是基于字符串的命令行方式,比如HTTP.FTP.POP3.SMTP.Telnet等.早期操作系统UNIX( ...
- vue中使用vue-i18n 一个简单的国际化操作
1.安装:npm install vue-i18n --save-dev 2.在main.js文件中引入: import VueI18n from 'vue-i18n' Vue.use(VueI18n ...
- Tableau的简单数据可视化操作
本文将讲解Tableau的基本使用和简单的数据分析. 在Tableau首页,我们可以看到有多种连接方式:文本文件.Excel.JSON文件.数据库等. 1.连接文本文件 点击"连接" ...
- 通过一个简单的数据库操作类了解PHP链式操作的实现
class Model{ public $table; //操作的表; private $opt; //查询的参数; private $pri; //表的主键; private $lastSql; / ...
- Android - 分享内容 - 添加一个简单的分享操作
在ActionBar上使用ActionProvider实现一个高效的友好的分享操作在Android 4.0(API等级14)上更容易了.一个ActionProvider,一旦附加到action bar ...
- mongodb数据库添加权限及简单数据库命令操作笔记
加固mongodb建议:修改数据库默认端口,添加数据库访问权限: 启动数据库(裸奔):C:\mongodb\bin>mongod --dbpath C:\MongoDB\data(同时用--db ...
- golang 创建一个简单的连接池,减少频繁的创建与关闭
一.连接池的描述图片如下: 二.连接池代码如下: package main; import ( "time" "sync" "errors" ...
- 使用node写一个简单的页面操作
let http = require('http'); let urlStr = require('url'); let fs = require('fs'); let path = require( ...
- [转]TEC1401.Report开发技术总结 - 第三章 使用Oracle Reports开发报表-创建一个分组报表(2/4)
本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284 第三章 创建一个分组报表 1. 建立数据模型 数据模型用于 ...
随机推荐
- poj 1383 Labyrinth【迷宫bfs+树的直径】
Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4004 Accepted: 1504 Descrip ...
- 层层递进Struts1(七)详解DispatchAction
通过前面几篇博客,不知道大家有没有发现这个问题,虽然现在可以灵活控制跳转了,但是Action的数量还是比较多,如何既能保证跳转灵活,还能减少Action的数量?这就是我们这篇博客所说的Dispatch ...
- 关于Cookie的有关内容
1.首先谈谈http协议与状态保持. Http协议本身是无状态的,这与http协议本来的目的是相符的,客户端只需要简单的向服务器发出请求操作,然后服务器对请求作出响应.无论客户端还是服务器都没有必要记 ...
- jQuery选择器总结 转
jQuery选择器总结 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3 ...
- linux —— 学习笔记(用户管理与权限控制)
目录:1.用户的创建和管理 2.组的创建和管理 3.文件执行权限的控制 4.不用密码执行sudo 1.用户的创建和管理 用户的创建和管理: useradd.usermod . userdel . ...
- 网络子系统43_ip选项预处理
//选项格式: // 1.type中指示该选项在分片时是否需要被拷贝 // 2.ptr从1算起,1为type的位置 // 3.len不包括type字段,其余都包括(len,ptr,选项内容) //ty ...
- Java多线程,哲学家就餐问题
问题描述:一圆桌前坐着5位哲学家,两个人中间有一只筷子,桌子中央有面条.哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭.上述问题会产生死锁的情况,当5个哲学家都拿起自己右手 ...
- 晨曦之光 linux Crontab 使用(转)
cron用法说明 cron的用法老是记不住,索性写下来备忘.下文内容大部分是根据<Cron Help Guide>翻译而来,有些部分是自己加上的. 全文如下: cron来源于希腊单词chr ...
- linux的文件系统及节点表
linux的文件系统及节点表 一 linux的文件系统1 我们都知道当我们安装linux时会首先给系统分区,然后我们会把分区格式化成EXT3格式的文件系统.那么在linux系统中还有没有其他的文件系 ...
- c++中返回对象与返回引用的区别
这几天在做用C++做课程设计,对其返回对象的实现感到迷惑. 通过对汇编代码的分析,可以清楚的看到,直接返回引用和返回对象的区别到底是什么. 分析的程序如下 #include<cstdio> ...