代码之家  ›  专栏  ›  技术社区  ›  user1139666

通过ADO.Net对SQL Server varchar数据进行右填充

  •  2
  • user1139666  · 技术社区  · 13 年前

    我正在公司开发一个C#应用程序。
    该应用程序通过ADO.Net使用SQL Server数据库。
    该应用程序使用.Net framework 4附带的用于SQL Server的ADO.Net数据提供程序。

    在以编程方式将字符串插入varchar字段时,我们遇到了一个问题。

    实例

    让我们考虑名为MY_table的数据库表,该表具有以下列:

    • MY_FIRST_COL内部
    • MY_SECOND_COL变量(250)

    我通过在SS Management Studio中执行以下SQL查询,将记录(REC1)插入到MY_TABLE中:

    insert into MY_TABLE (1, "");
    

    然后我使用SSMS选择REC1。
    然后我复制MY_SECOND_COL字段中包含的字符串。
    然后我把字符串粘贴到记事本++中。
    我注意到这个字符串是由0个字符组成的。
    好吧,这很有道理!

    现在,我使用SqlCommand对象以编程方式将一条记录(REC2)插入到MY_TABLE中。

    以下是CommandText属性中包含的字符串:

    insert into MY_TABLE (@p0, @p1);
    

    以下是与第二个参数对应的SqlParameter对象的属性中包含的一些值:

    • 数据库类型:System.Data.DbType.AnsiStringFixedLength
    • 方向:输入
    • IsNullable:false
    • 参数名称:“@p1”
    • 精度:0
    • 比例:0
    • 大小:0
    • SqlDbType:字符
    • 值:“”

    然后我使用SSMS选择REC2。
    然后我复制MY_SECOND_COL字段中包含的字符串。
    然后我把字符串粘贴到记事本++中。
    我注意到这个字符串是由250个字符组成的。
    为什么?

    任何帮助都将不胜感激

    2 回复  |  直到 13 年前
        1
  •  1
  •   Community Mohan Dere    6 年前
    SqlDbType : Char
    

    这是你的问题。你想要 VarChar Char s是固定宽度的字符串,用空格填充。

    SqlDbType 以下为:

    烧焦 String 。非Unicode字符的固定长度流,范围在1到8000个字符之间。

    瓦查尔 一串 。非Unicode字符的可变长度流,范围在1到8000个字符之间。使用 瓦查尔 当数据库列为 varchar(最大值)

        2
  •  0
  •   Darren user513543    13 年前

    您正在使用SQL数据类型 char .字符分配全部空间(在这种情况下为250个字符),其中 VARCHAR 只分配所需的空间。

    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