|
在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,这样导入就没有错了。如
这次的数据类型小研究到此结束,这个给新手区的首页浪费资源了。呵呵.........
|
|