2

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

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

例子

让我们考虑名为 MY_TABLE 的数据库表,其中包含以下列:

  • MY_FIRST_COL 整数
  • MY_SECOND_COL varchar(250)

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

insert into MY_TABLE (1, "");

然后我使用 SSMS 选择 REC1。
然后我复制包含在 MY_SECOND_COL 字段中的字符串。
然后我将字符串粘贴到 Notepad++ 中。
我注意到字符串由 0 个字符组成。
好吧,有道理!

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

这是包含在 CommandText 属性中的字符串:

insert into MY_TABLE (@p0, @p1);

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

  • DbType : System.Data.DbType.AnsiStringFixedLength
  • 方向:输入
  • IsNullable : 假
  • 参数名称:“@p1”
  • 精度:0
  • 规模:0
  • 尺寸 : 0
  • SqlDbType : 字符
  • 价值 : ””

然后我使用 SSMS 选择 REC2。
然后我复制包含在 MY_SECOND_COL 字段中的字符串。
然后我将字符串粘贴到 Notepad++ 中。
我注意到该字符串由 250 个字符组成。
为什么 ?

任何帮助将不胜感激

4

2 回答 2

1
SqlDbType : Char

那是你的问题。你想要VarCharChars 是固定宽度的字符串,用空格填充。

SqlDbType

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

变量字符 String。非 Unicode 字符的可变长度流,范围在 1 到 8,000 个字符之间。当数据库列是varchar(max)时使用VarChar

于 2012-09-13T10:03:57.680 回答
0

您正在使用 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
于 2012-09-13T10:06:50.563 回答