【发布时间】:2016-07-11 17:40:21
【问题描述】:
我有一个字段名为 varchar(20) 的表 UserTable。我有一个编辑屏幕,其中设置了数据绑定以绑定到 UserTable.name。问题是,当我编辑它时,该字段的值后跟空格,最长为 20。因此,用户输入该字段并尝试例如在他的名字末尾添加一个 s ,用户界面抱怨,因为该字段已满。我怎样才能让数据库不添加那些额外的空格。
创建表格的代码如下:
CREATE TABLE [dbo].[US_usertable](
[user_name] [varchar](20) NOT NULL,
[password] [varchar](100) NOT NULL,
[departmentID] [int] NOT NULL,
[employeeID] [int] IDENTITY(1,1) NOT NULL,
[emailaddress] [nchar](30) NULL,
CONSTRAINT [PK_US_usertable] PRIMARY KEY CLUSTERED
(
[employeeID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
这是表适配器中的查询:
SELECT emailaddress, employeeID, departmentID, user_name, password FROM us_usertable WHERE (employeeID = @empID)
【问题讨论】:
-
一种方法是“修剪”结果。您的解决方案取决于用于绑定的技术。在网上搜索示例。 ASP.NET 有一个解决方案——使用 Entity Framework 或 nHibernate 有一个不同的解决方案。一种快速而肮脏的方法(不适合生产代码)是直接在 SQL 语句中进行 rtrim - 这会增加查询的 I/O 开销,但它会“完成”。
-
奇怪的是这通常是 char(size) 列而不是 varchar(size) 列的行为
-
您遇到问题的是
nchar,是吗?请改用nvarchar。 -
您应该使用
NVarchar来获取人类可读的文本;不是Varchar也不是nchar,但是您发布的代码没有您描述的行为;这是你正在做的其他事情。发布“已设置数据绑定”的代码。 -
你确定这个字段一直都是varchar类型的字段吗?如果您最初将其创建为 char(20) 向其添加数据,然后将其更改为 varchar(20),则当列为固定大小时添加的额外空格不会自动从现有数据中删除,而新记录将不会填充到带空格的字段大小
标签: c# sql-server