none
UINT32データ型の扱いについてです。 RRS feed

  • 質問

  •  

    VS2005,C#,SQLServerCompact v3.1を使用したアプリケーションを作成しております。

     

    C#のUINT32のデータをSQLServer Compact のテーブルへ格納したいのですが,

    私が調べたところ,SQLServer Compact のデータ型では 符号なし4byteのデータ型をサポートしていないようです。

     

    bigintのデータ型の項目をテーブルへ作成してUINT32のデータを格納する方法以外ないのでしょうか?

    可能であれば,DB側は4byteの領域でUINT32のデータを扱いたいです。

     

    どなたかご存知の方がおられましたら,御教示を願いたく,お願いいたします。

    2009年1月16日 1:55

回答

  • こんにちは、naginoです。

     

    すみませんが不勉強なもので、「SQL Server Compact Edition v3.1 = SQL Server 2005 Compact Edition」という認識であっていますでしょうか。

    この系列の製品は名称が複雑に変化しているので、毎回悩みます。

     

    上記で相違無い場合、MSDN ライブラリを見ると、確かにちょうど良い型がありませんね。

    http://msdn.microsoft.com/ja-jp/library/ms172424(SQL.90).aspx

     

    この場合は bigint 型にて扱うことになるかと思います。

    そのまま演算できるなど本来の数値としての意味を持ったまま格納できますので、一番安全だと思います。

     

    どうしても 4byte でという場合は、あまりお勧めしませんが、2,147,483,648 でバイアスして int 型に格納するという手もあります。

     ex.) 実際の値 ⇒ DB内の値

       ・ 0 ⇒ -2,147,483,648

       ・ 100 ⇒ -2,147,483,548

       ・ 2,147,483,648 ⇒ 0

       ・ 2,147,483,748 ⇒ 100

    0~4,294,967,295 を –2,147,483,648~2,147,483,647 にマッピングするイメージです。

    ディスク容量が貴重な環境では、選択肢となりうるかと思います。

     

    ご参考になれば幸いです。

    2009年1月19日 0:58
  • 教えていただき,ありがとうございます。

     

    一応,環境はSQL Server 2005 Compact Editionです。

    教えていただいたように,うまく,0~4,294,967,295 を –2,147,483,648~2,147,483,647 にマッピングしてみようと思います。

     

    2009年1月19日 2:01

すべての返信

  • こんにちは、naginoです。

     

    すみませんが不勉強なもので、「SQL Server Compact Edition v3.1 = SQL Server 2005 Compact Edition」という認識であっていますでしょうか。

    この系列の製品は名称が複雑に変化しているので、毎回悩みます。

     

    上記で相違無い場合、MSDN ライブラリを見ると、確かにちょうど良い型がありませんね。

    http://msdn.microsoft.com/ja-jp/library/ms172424(SQL.90).aspx

     

    この場合は bigint 型にて扱うことになるかと思います。

    そのまま演算できるなど本来の数値としての意味を持ったまま格納できますので、一番安全だと思います。

     

    どうしても 4byte でという場合は、あまりお勧めしませんが、2,147,483,648 でバイアスして int 型に格納するという手もあります。

     ex.) 実際の値 ⇒ DB内の値

       ・ 0 ⇒ -2,147,483,648

       ・ 100 ⇒ -2,147,483,548

       ・ 2,147,483,648 ⇒ 0

       ・ 2,147,483,748 ⇒ 100

    0~4,294,967,295 を –2,147,483,648~2,147,483,647 にマッピングするイメージです。

    ディスク容量が貴重な環境では、選択肢となりうるかと思います。

     

    ご参考になれば幸いです。

    2009年1月19日 0:58
  • 教えていただき,ありがとうございます。

     

    一応,環境はSQL Server 2005 Compact Editionです。

    教えていただいたように,うまく,0~4,294,967,295 を –2,147,483,648~2,147,483,647 にマッピングしてみようと思います。

     

    2009年1月19日 2:01