您的位置:首页 > 数据库

数据类型的小小研究:Access与SQL Server的数据类型

2008-10-30 13:17 501 查看
原文发布在博客园:

.STYLE3 {color: #2C8EA7}
.STYLE5 {color: #AF1426}
.STYLE7 {color: #0000ff}
.STYLE9 {
font-size: 14px;
font-family: "宋体";
}

在Access中只有10中数据类型,其中一种对应String的 数据类型是 文本 ,但是SQL Server中的数据类型有多种:char,nchar,nvarchar,varchar,text,ntext。如下图:



那它们之间有什么区别呢,在Access里面怎么可以用吗?带着这些疑问我做了实验。

1、在Access中用这些数据类型创建表

public void Create()
{
string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E://74390440_69_20081029.mdb;Persist Security Info=False";
string query = "CREATE TABLE Test(t1 char(10),t2 nchar(10),t3 nvarchar(50),t4 varchar(50),t5 ntext,t6 text)";
OleDbHelper.ExecuteNonQuery(connectString, CommandType.Text, query, null);
}

居然用这样的SQL语句"CREATE TABLE Test(t1 char(10),t2 nchar(10),t3 nvarchar(50),t4 varchar(50),t5 ntext,t6 text)"创建成功了!


在char,nchar,nvarchar,varchar这四个类型中,所创建的都是一样,都是文本类型。text与ntext创建成备注类型了。

2、Access里面填入数据导入到相同的SQL Server数据表中

public void Insert()
{
string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E://74390440_69_20081029.mdb;Persist Security Info=False";
string query = "select * from Test";
DataSet ds = new DataSet();
OleDbConnection connA = new OleDbConnection(connectString);
connA.Open();
OleDbDataAdapter oda = new OleDbDataAdapter(query, connA);
oda.Fill(ds);
connA.Close();
SqlConnection conn = new SqlConnection("server=.;database=NBBSImport;uid=sa;pwd=;");
conn.Open();
SqlBulkCopy sbc = new SqlBulkCopy(conn);
sbc.DestinationTableName ="Test";
//将数据集合和目标服务器的字段对应
for (int q = 0; q < ds.Tables[0].Columns.Count; q++)
{
sbc.ColumnMappings.Add(ds.Tables[0].Columns[q].ColumnName, ds.Tables[0].Columns[q].ColumnName);
}
try
{
sbc.WriteToServer(ds.Tables[0]);
}
catch(Exception ex)
{
throw;
}

}

很不幸,结果出错了,


找来了数据类型的对应关系:

访问类型名称
数据库数据类型
OLEDB 类型
.NET 框架类型
成员名称
文本
VarWChar
DBTYPE _ WSTR
System.String
OleDbType.VarWChar
备忘录
LongVarWCha R
DBTYPE _ WSTR
System.String
OleDbType.LongVarWChar
字节数:
UnsignedTinyInt
DBTYPE _ UI 1
System.Byte
OleDbType.UnsignedTinyInt
是 / 否
Boolean
DBTYPE_BOOL
System.Boolean
OleDbType.Boolean
日期 / 时间
DateTime
DBTYPE _ DATE
System.DateTime
OleDbType.date
货币
十进制
DBTYPE_NUMERIC
System.Decimal
OleDbType.numeric
十进制数:
十进制
DBTYPE_NUMERIC
System.Decimal
OleDbType.numeric
双数:

DBTYPE_R8
System.Double
OleDbType.Double
Autonumber (复制 ID)
GUID
DBTYPE_GUID
System.Guid
OleDbType.guid
复制 (ID) 号:
GUID
DBTYPE_GUID
System.Guid
OleDbType.guid
Autonumber (长整型)
整数
DBTYPE_I4
System.Int 32
OleDbType.integer
数量: (长整型)
整数
DBTYPE_I4
System.Int 32
OleDbType.integer
OLE 对象
LongVarBinary
DBTYPE_BYTES
数组
System.Byte
OleDbType.LongVarBinary
单个数字:
单个
DBTYPE_R4
System.Single
OleDbType.single
整型数:
SmallInt
DBTYPE_I2
System.Int 16
OleDbType.SmallInt
二进制
VarBinary *
DBTYPE_BYTES
数组
System.Byte
OleDbType.binary
超链接
VarWChar
DBTYPE _ WSTR
System.String
OleDbType.VarWChar
原来从SQL Server中的char类型到Access大小变了,那么再从Access导入到SQL Server就会出错了。

3、如果把SQL Server中的char,nchar类型的长度大小变为20,这样导入就没有错了。如



这次的数据类型小研究到此结束呵呵.........
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: