【问题标题】:SQL C# Interface - SQL loading data filled with extra spacesSQL C# 接口 - SQL 加载填充了额外空格的数据
【发布时间】: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


【解决方案1】:

在 Visual Studio 生成的代码中,它将名称定义为 char。当我对整个项目进行搜索时,我能够看到它并在它出现的四五个地方将其更改为 varchar。当我再次测试代码时,它按预期的方式工作。

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多