数据类型的小小研究: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;
}
}
很不幸,结果出错了,
找来了数据类型的对应关系:
原来从SQL Server中的char类型到Access大小变了,那么再从Access导入到SQL Server就会出错了。
3、如果把SQL Server中的char,nchar类型的长度大小变为20,这样导入就没有错了。如
这次的数据类型小研究到此结束呵呵.........
.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 |
3、如果把SQL Server中的char,nchar类型的长度大小变为20,这样导入就没有错了。如
这次的数据类型小研究到此结束呵呵.........
相关文章推荐
- Access, SQL Server, and Oracle数据类型的对应关系
- Access, SQL Server, and Oracle数据类型的对应关系
- [转] Access 和 SQL Server数据类型的比较
- Access 和 SQL Server数据类型的比较(转)
- Access, SQL Server, and Oracle数据类型的对应关系
- mysql,sql server,access数据类型汇总
- Access, SQL Server, and Oracle数据类型的对应关系
- Access, SQL Server, and Oracle数据类型的对应关系
- Access, SQL Server, and Oracle数据类型的对应关系
- Access, SQL Server, and Oracle数据类型的对应关系
- asp中Ms- sql server 数据类型转为 ACCESS 中的?
- 【转】Access, SQL Server, and Oracle数据类型的对应关系
- Access, SQL Server, and Oracle数据类型的对应关系(转)
- Access 和 SQL Server数据类型的比较
- sql server 字符串处理和数据类型转换几点体会
- access 导数据到sql server 2008
- SQL SERVER 与ACCESS、EXCEL的数据转换
- sql server 与C#数据类型对应表
- DB字段顺序与类的属性顺序一致:{Oracle.DataAccess.Client.OracleException ORA-00932: 数据类型不一致: 应为 TIMESTAMP, 但却获得 NUMBER
- C#中SQL SERVER 2008字符数据类型使用心得