欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

解剖SQLSERVER 第三篇 數(shù)據(jù)類型的實(shí)現(xiàn)

系統(tǒng) 1903 0
原文: 解剖SQLSERVER 第三篇 數(shù)據(jù)類型的實(shí)現(xiàn)(譯)

解剖SQLSERVER 第三篇 ?數(shù)據(jù)類型的實(shí)現(xiàn)(譯)

?

http://improve.dk/implementing-data-types-in-orcamdf/

實(shí)現(xiàn)對SQLSERVER數(shù)據(jù)類型的解析在OrcaMDF 軟件里面是一件比較簡單的事,只需要實(shí)現(xiàn)ISqlType 接口

      
        public
      
      
        interface
      
      
         ISqlType

{

    
      
      
        bool
      
       IsVariableLength { 
      
        get
      
      
        ; }

    
      
      
        short
      
      ? FixedLength { 
      
        get
      
      
        ; }

    
      
      
        object
      
       GetValue(
      
        byte
      
      
        [] value);

}
      
    

IsVariableLength ?返回?cái)?shù)據(jù)類型是否是定長的還是變長的。

FixedLength ?返回定長數(shù)據(jù)類型的長度,否則他返回null

數(shù)據(jù)類型解釋器不關(guān)心變長字段的長度,輸入的字節(jié)大小會(huì)決定長度

最后, GetValue ?將輸入字節(jié)參數(shù)進(jìn)行解釋并將字節(jié)解釋為相關(guān)的.NET對象

?

?

SqlInt實(shí)現(xiàn)

int類型作為定長類型是非常簡單的,能直接使用BitConverter進(jìn)行轉(zhuǎn)換

      
        public
      
      
        class
      
      
         SqlInt : ISqlType

{

    
      
      
        public
      
      
        bool
      
      
         IsVariableLength

    {

        
      
      
        get
      
       { 
      
        return
      
      
        false
      
      
        ; }

    }



    
      
      
        public
      
      
        short
      
      ?
      
         FixedLength

    {

        
      
      
        get
      
       { 
      
        return
      
      
        4
      
      
        ; }

    }



    
      
      
        public
      
      
        object
      
       GetValue(
      
        byte
      
      
        [] value)

    {

        
      
      
        if
      
       (value.Length != 
      
        4
      
      
        )

            
      
      
        throw
      
      
        new
      
       ArgumentException(
      
        "
      
      
        Invalid value length: 
      
      
        "
      
       +
      
         value.Length);



        
      
      
        return
      
       BitConverter.ToInt32(value, 
      
        0
      
      
        );

    }

}
      
    

?

相關(guān)測試

      
        [TestFixture]


      
      
        public
      
      
        class
      
      
         SqlIntTests

{

    [Test]

    
      
      
        public
      
      
        void
      
      
         GetValue()

    {

        
      
      
        var
      
       type = 
      
        new
      
      
         SqlInt();

        
      
      
        byte
      
      
        [] input;



        input 
      
      = 
      
        new
      
      
        byte
      
      [] { 
      
        0x5e
      
      , 
      
        0x3b
      
      , 
      
        0x27
      
      , 
      
        0x2a
      
      
         };

        Assert.AreEqual(
      
      
        707214174
      
      
        , Convert.ToInt32(type.GetValue(input)));



        input 
      
      = 
      
        new
      
      
        byte
      
      [] { 
      
        0x8d
      
      , 
      
        0xf9
      
      , 
      
        0xaa
      
      , 
      
        0x30
      
      
         };

        Assert.AreEqual(
      
      
        816511373
      
      
        , Convert.ToInt32(type.GetValue(input)));



        input 
      
      = 
      
        new
      
      
        byte
      
      [] { 
      
        0x7a
      
      , 
      
        0x4a
      
      , 
      
        0x72
      
      , 
      
        0xe2
      
      
         };

        Assert.AreEqual(
      
      -
      
        495826310
      
      
        , Convert.ToInt32(type.GetValue(input)));

    }



    [Test]

    
      
      
        public
      
      
        void
      
      
         Length()

    {

        
      
      
        var
      
       type = 
      
        new
      
      
         SqlInt();



        Assert.Throws
      
      <ArgumentException>(() => type.GetValue(
      
        new
      
      
        byte
      
      [
      
        3
      
      
        ]));

        Assert.Throws
      
      <ArgumentException>(() => type.GetValue(
      
        new
      
      
        byte
      
      [
      
        5
      
      
        ]));

    }

}
      
    

?

?

SqlNVarchar 實(shí)現(xiàn)

nvarchar 類型也是非常簡單的,注意,如果是可變長度我們返回長度的結(jié)果是null

ISqlType 接口實(shí)現(xiàn)必須是無狀態(tài)的

GetValue 簡單的將輸入的字節(jié)的數(shù)進(jìn)行轉(zhuǎn)換,這將轉(zhuǎn)換為相關(guān)的.NET 類型,這里是string類型

      
        public
      
      
        class
      
      
         SqlNVarchar : ISqlType

{

    
      
      
        public
      
      
        bool
      
      
         IsVariableLength

    {

        
      
      
        get
      
       { 
      
        return
      
      
        true
      
      
        ; }

    }



    
      
      
        public
      
      
        short
      
      ?
      
         FixedLength

    {

        
      
      
        get
      
       { 
      
        return
      
      
        null
      
      
        ; }

    }



    
      
      
        public
      
      
        object
      
       GetValue(
      
        byte
      
      
        [] value)

    {

        
      
      
        return
      
      
         Encoding.Unicode.GetString(value);

    }

}
      
    

?

相關(guān)測試

      
        [TestFixture]


      
      
        public
      
      
        class
      
      
         SqlNvarcharTests

{

    [Test]

    
      
      
        public
      
      
        void
      
      
         GetValue()

    {

        
      
      
        var
      
       type = 
      
        new
      
      
         SqlNVarchar();

        
      
      
        byte
      
      [] input = 
      
        new
      
      
        byte
      
      [] { 
      
        0x47
      
      , 
      
        0x04
      
      , 
      
        0x2f
      
      , 
      
        0x04
      
      , 
      
        0xe6
      
      , 
      
        0x00
      
      
         };



        Assert.AreEqual(
      
      
        "
      
      
        u0447u042fu00e6
      
      
        "
      
      , (
      
        string
      
      
        )type.GetValue(input));

    }

}
      
    

其他類型的實(shí)現(xiàn)

OrcaMDF 軟件現(xiàn)在支持12種數(shù)據(jù)類型,以后將會(huì)支持datetime和bit類型,因?yàn)檫@兩個(gè)類型相比起其他類型有些特殊

其余類型我以后也將會(huì)進(jìn)行實(shí)現(xiàn)

?

第三篇完

解剖SQLSERVER 第三篇 數(shù)據(jù)類型的實(shí)現(xiàn)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 韩国美女丝袜一区二区 | 久久亚洲精品国产亚洲老地址 | 免费毛片看| 亚洲电影免费 | 亚洲综合国产精品 | 91精品在线看 | 午夜精品久久久久久久久久久久久 | 男女视频在线观看免费 | 男女性刺激爽爽免费视频 | 久久国产成人福利播放 | 日本视频免费高清一本18 | 久久国产一区二区 | 91免费在线 | 青娱乐欧美 | 超级成人97碰碰碰免费 | 久久九色| 日韩欧美精品在线观看 | a久久| 热99精品| 日韩一区二区不卡 | 欧美福利| 欧美成人区 | 一区二区高清视频 | 看全色黄大色黄大片色黄看的 | 久久国产视频网 | 国产合集福利视频在线视频 | 精品国产一区二区 | 一级免费黄色免费片 | 91网站在线观看视频 | 国产精品久久久久久久久久久久 | 欧美日韩视频在线第一区二区三区 | 伊人亚洲 | 2级毛片 | 国产亚洲欧洲国产综合一区 | 亚洲欧美中文日韩在线v日本 | 福利视频中文在线观看 | 达达兔午夜起神影院在线观看麻烦 | 日本欧美不卡一区二区三区在线 | 天堂综合网久久 | 韩国男女无遮挡高清性视频 | 国产精品一二区 |