|  | 
 
| 在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;
 }
 
 }
 
 很不幸,结果出错了,
   找来了数据类型的对应关系:
 
 原来从SQL Server中的char类型到Access大小变了,那么再从Access导入到SQL Server就会出错了。| 访问类型名称 
 | 数据库数据类型 
 | 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 
 | 
 3、如果把SQL Server中的char,nchar类型的长度大小变为20,这样导入就没有错了。如
 
   这次的数据类型小研究到此结束,这个给新手区的首页浪费资源了。呵呵.........
   | 
 | 
| 
 |