2

私は自分の会社でC#アプリケーションを開発しています。
アプリケーションは、ADO.Netを介してSQLServerデータベースを使用します。
このアプリケーションは、.NetFramework4に付属のSQLServer用のADO.Netデータプロバイダーを使用します。

プログラムでvarcharフィールドに文字列を挿入するときに問題が発生します。

次の列を持つMY_TABLEという名前のデータベーステーブルについて考えてみましょう。

  • MY_FIRST_COL int
  • MY_SECOND_COL varchar(250)

SS Management Studio内で次のSQLクエリを実行して、レコード(REC1)をMY_TABLEに挿入します。

insert into MY_TABLE (1, "");

次に、SSMSを使用してREC1を選択します。
次に、MY_SECOND_COLフィールドに含まれている文字列をコピーします。
次に、文字列をNotepad++に貼り付けます。
文字列が0文字で構成されていることに気付きました。
OK、それは理にかなっています!

次に、SqlCommandオブジェクトを使用して、プログラムでレコード(REC2)をMY_TABLEに挿入します。

CommandTextプロパティに含まれる文字列は次のとおりです。

insert into MY_TABLE (@p0, @p1);

2番目のパラメータに対応するSqlParameterオブジェクトのプロパティに含まれるいくつかの値は次のとおりです。

  • DbType:System.Data.DbType.AnsiStringFixedLength
  • 方向:入力
  • IsNullable:false
  • ParameterName: "@ p1"
  • 精度:0
  • スケール:0
  • サイズ:0
  • SqlDbType:Char
  • 価値 : ""

次に、SSMSを使用してREC2を選択します。
次に、MY_SECOND_COLフィールドに含まれている文字列をコピーします。
次に、文字列をNotepad++に貼り付けます。
文字列が250文字で構成されていることに気付きました。
なんで ?

どんな助けでも大歓迎です

4

2 に答える 2

1
SqlDbType : Char

それはあなたの問題だ。あなたが欲しいVarCharCharsは固定幅の文字列で、スペースが埋め込まれています。

SqlDbType

Char String。1〜8,000文字の範囲の非Unicode文字の固定長ストリーム。

VarChar String。1〜8,000文字の範囲の非Unicode文字の可変長ストリーム。データベース列がvarchar(max)の場合は、 VarCharを使用します。

于 2012-09-13T10:03:57.680 に答える
0

SQLデータ型を使用していますcharVARCHARCharsは、必要なスペースのみを割り当てるフルスペース(この場合は250文字)を割り当てます。

DECLARE @Result1 VARCHAR(200)
DECLARE @Result2 CHAR(200)

SET @Result1 = 'Hello' -- allocates 5 character spaces
SET @Result2 = 'Hello' -- allocates 200 character spaces

SELECT DATALENGTH(@Result1) -- 5
SELECT DATALENGTH(@Result2) -- 200
于 2012-09-13T10:06:50.563 に答える