5.数据检索
无论是否通过索引,varchar类型的数据检索略优于char的扫描。
选择char还是选择varchar的建议
1.适宜于char的情况:
a. 列中的各行数据长度基本一致,长度变化不超过50字节;
b. 数据变更频繁,数据检索的需求较少。
c. 列的长度不会变化,修改char类型列的宽度的代价比较大。
d. 列中不会出现大量的NULL值。
e. 列上不需要建立过多的索引,过多的索引对char列的数据变更影响较大。
2.适宜于varchar的情况;
a. 列中的各行数据的长度差异比较大。
b. 列中数据的更新非常少,但查询非常频繁。 c. 列中经常没有数据,为NULL值或为空值
nchar [ ( n ) ]
n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。
nvarchar [ ( n | max ) ]
可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。
注释
如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。
如果列数据项的大小可能相同,请使用 nchar。
如果列数据项的大小可能差异很大,请使用 nvarchar。
sysname 是系统提供的用户定义数据类型,除了不可为空值外,在功能上与 nvarchar(128) 相同。sysname 用于引用数据库对象名。
为使用 nchar 或 nvarchar 的对象分配的是默认的数据库排序规则,但可使用 COLLATE 子句分配特定的排序规则。
SET ANSI_PADDING ON 永远适用于 nchar 和 nvarchar。SET ANSI_PADDING OFF 不适用于 nchar 或 nvarchar 数据类型。
在Oracle中CHAR,NCHAR,VARCHAR,VARCHAR2,NVARCHAR2这五种类型的区别
1.CHAR(size)和VARCHAR(size)的区别
CHAR为定长的字段,最大长度为2K字节;
VARCHAR为可变长的字段,最大长度为4K字节;
2.CHAR(size)和NCHAR(size)的区别
CHAR如果存放字母数字占1个字节,存放GBK编码的汉字存放2个字节,存放UTF-8编码的汉字占用3个字节;
NCHAR根据所选字符集来定义存放字符的占用字节数,一般都为2个字节存放一个字符(不管字符或者汉字)
3.VARCHAR(size)和VARCHAR2(size)的区别
在现在的版本中,两者是没有区别的;最大长度为4K字节;推荐使用VARCHAR2;
4.VARCHAR2(size)和NVARCHAR2(size)的区别
最大长度为4K字节,区别同CHAR与NCHAR的区别;(如果数据库字符集长度是2,则NVARCHAR2最大为2K)
5.共同特性
当执行insert的时候,插入的值为'',则转变成null,即insert ... values('') <=> insert ... values(null)
搜索的条件须用where xx is null
6.例子
比如有一个性别字段,里面存放“男,女”的其中一个值,两种常用选择 CHAR(2) 和 NCHAR(1)
柒、c#通过oledb连接Oracle
先装oracle客户端
1、控制面板->管理工具->数据源(ODBC)->添加数据源->选择oracle 客户端
Data Source Name 可以任意起名,推荐和SID一样 Description 描述
TNS Service Name 下拉菜单中会自动显示环境变量TNS_ADMIN所指目录下的tnsnames.ora文件中SERVICE_NAME的名称,也就是要连接的SID UserID 用户名 2、代码
string ConnectionString = \连接字符串 OracleConnection conn = new OracleConnection(ConnectionString); //创建一个新连接 try {
conn.Open(); //打开连接
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = \语句 OracleDataReader rs = cmd.ExecuteReader();
while (rs.Read()) //读取数据,如果rs.Read()返回为false的话,就说明到记录集的尾部了 {
MessageBox.Show(rs.GetString(1)); }
rs.Close(); }
catch (Exception e) {
MessageBox.Show(e.Message); }
finally {
conn.Close(); }
Oracle ODBC
New version:
\
Old version:
\ODBC Driver for
Oracle};ConnectString=OracleServer.world;Uid=myUsername;Pwd=myPassword;\
OLEDB, OleDbConnection (.NET)
Standard security:
\ This one's from Microsoft, the following are from Oracle Standard Security:
\
Trusted Connection:
\
OracleConnection (.NET)
Standard:
\ This one works only with Oracle 8i release 3 or later Declare the OracleConnection: C#:
using System.Data.OracleClient;
OracleConnection oOracleConn = new OracleConnection(); oOracleConn.ConnectionString = \oOracleConn.Open();
VB.NET:
Imports System.Data.OracleClient
Dim oOracleConn As OracleConnection = New OracleConnection() oOracleConn.ConnectionString = \oOracleConn.Open()
Data Shape
MS Data Shape:
\Security Info=False;Data Provider=MSDAORA;Data Source=orac;user id=username;password=mypw\
捌、一个C#操作Oracle的通用类
using System;
using System.Data;
using System.Data.OracleClient;
using System.Web.UI.WebControls; namespace SiFenManager.Util {
///
/// 数据库通用操作类 ///
public class Database {
protected OracleConnection con;//连接对象
public Database() {
con=new OracleConnection(DafangFramework.AppConfig.DataBaseConnectionString); }
public Database(string constr) {
con=new OracleConnection(constr); }
#region 打开数据库连接 ///
/// 打开数据库连接 ///
private void Open() {
//打开数据库连接
if(con.State==ConnectionState.Closed) { try {
//打开数据库连接 con.Open(); }
catch(Exception e) {
throw e; } } }
#endregion
#region 关闭数据库连接 ///
/// 关闭数据库连接 ///
private void Close()