none
SQLServerの型と合わせるべき? RRS feed

  • 質問

  • VB2008、SQLServer2008です。

    初歩的な質問でお恥ずかしいのですが教えてください。

    SQLServerのテーブルにchar型のフィールドがあります。

    このテーブルにデータを追加する場合、VBの方もその値をchar型で宣言すべきでしょうか?

    string型で宣言したものを追加しても特に問題なかったような気がしたのですが、本当は合わせるべきでしょうか?

    宜しくお願い致します。

    2012年4月5日 1:52

回答

  • SQL ServerのChar型は固定長です。このような型は.NET Frameworkには存在しません。よって、VBにおけるchar型とは全く別のものになりますので、VBのchar型で受けたとしても合わせたことにはなりません。どのみち.NET Frameworkでは可変長文字列として扱うしかありませんから、stringで受けるのが正解でしょう。
    何で受けるかは、TabaleAdapterで作成されるデータテーブルにおける型に合わせて置けば良いでしょう。逆にそれに合わせておかなければ、キャストを行う必要が発生するなど面倒なことになります。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク hana0101 2012年4月5日 6:54
    2012年4月5日 2:35
    モデレータ
  • 付け加えて、

    SQL Serverのchar / varcharの文字コードはANSI(SHIFT-JIS)です。それに対してVBのcharはUnicodeです。文字コードが異なるため、値がそもそも異なっています。

    VB、および.NET FrameworkにANSI文字を表すデータ型は存在しません。逆にSQL ServerでのUnicode文字はnchar / nvarcharになります。これとて並べ替えルールなど完全に一致するものではありません。

    • 回答としてマーク hana0101 2012年4月5日 6:54
    2012年4月5日 2:44

すべての返信

  • SQL ServerのChar型は固定長です。このような型は.NET Frameworkには存在しません。よって、VBにおけるchar型とは全く別のものになりますので、VBのchar型で受けたとしても合わせたことにはなりません。どのみち.NET Frameworkでは可変長文字列として扱うしかありませんから、stringで受けるのが正解でしょう。
    何で受けるかは、TabaleAdapterで作成されるデータテーブルにおける型に合わせて置けば良いでしょう。逆にそれに合わせておかなければ、キャストを行う必要が発生するなど面倒なことになります。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク hana0101 2012年4月5日 6:54
    2012年4月5日 2:35
    モデレータ
  • 付け加えて、

    SQL Serverのchar / varcharの文字コードはANSI(SHIFT-JIS)です。それに対してVBのcharはUnicodeです。文字コードが異なるため、値がそもそも異なっています。

    VB、および.NET FrameworkにANSI文字を表すデータ型は存在しません。逆にSQL ServerでのUnicode文字はnchar / nvarcharになります。これとて並べ替えルールなど完全に一致するものではありません。

    • 回答としてマーク hana0101 2012年4月5日 6:54
    2012年4月5日 2:44
  • trapemiya様、佐祐理様、ありがとうございます。

    string型で良いのだと安心しました。

    詳しく説明してくださり、ありがとうございました!

    2012年4月5日 6:54
  • すでに解決済みのようですが、参考になりそうなページを紹介し
    ておきます。

    SQL Server データ型のマッピング (ADO.NET)
    http://msdn.microsoft.com/ja-jp/library/cc716729.aspx


    パラメータおよびパラメータのデータ型の構成 (ADO.NET)
    http://msdn.microsoft.com/ja-jp/library/yy6y35y8.aspx

    2012年4月5日 12:17