zoukankan      html  css  js  c++  java
  • 数据类型的小小研究:Access与SQL Server的数据类型

             在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,这样导入就没有错了。如

     这次的数据类型小研究到此结束,这个给新手区的首页浪费资源了。呵呵.........

  • 相关阅读:
    egret 示例实战六:利用Timer定时器,实现钟表秒针行走效果
    egret 示例实战六:延迟操作,实现打字效果
    egret:什么是脏矩形
    egret 示例实战五:随机画圆
    egret 示例实战四:圆弧遮罩
    egret 示例实战三:点击不同对象提升至最上层
    egret 示例实战二:实现爱心缩放和旋转动画
    egret 示例实战一:轻触屏幕调整显示对象位置
    egret:tabBar怎么取消默认选中呢?
    egret:ViewStack 中的scroller滚动条的隐藏
  • 原文地址:https://www.cnblogs.com/stonespawn/p/1321873.html
Copyright © 2011-2022 走看看