【问题标题】:Varchar in sql creating extra whitespacessql中的varchar创建额外的空格
【发布时间】:2018-03-25 01:35:27
【问题描述】:

好吧,我正在用 C# 构建一个小爱好程序,我正在尝试将我的程序中的信息写入 Sql

问题是我在 Sql 中有一些 varchar 字段,最大长度为 50 当我发送信息以填充这些列时,它们将被添加额外的空间,直到达到 50 个字符

我已经尝试将varchar 更改为nvarchar 只是为了看看它是否有效

我一直在研究的是nchar 会做这种事情,但使用varchar 我应该没有问题,但我有它们..

public PersonModel CreatePerson(PersonModel model)
{
    using (IDbConnection connection =
        new System.Data.SqlClient.SqlConnection(GlobalConfig.CnnString(db)))
    {
        var p = new DynamicParameters();
        p.Add("@FirstName", model.FirstName);
        p.Add("@LastName", model.LastName);
        p.Add("@EmailAddress", model.EmailAddress);
        p.Add("@CellphoneNumber", model.CellphoneNumber);
        p.Add("@id", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);

        connection.Execute("dbo.spPeople_Insert", p, commandType: CommandType.StoredProcedure);
        model.Id = p.Get<int>("@id");

        return model;
    }
}

这就是我的称呼

    if (ValidateForm())
    {
        PersonModel p = new PersonModel();
        p.FirstName = firstNameValue.Text;
        p.LastName = lastNameValue.Text;
        p.EmailAddress = emailValue.Text;
        p.CellphoneNumber = cellphoneValue.Text;

顺便说一句,这些是我表单中的文本框

【问题讨论】:

  • 在将 string 值发送到 SQL 数据库之前调用 Trim()
  • 它们被传递时没有空格,因为我正在使用调试器进行检查
  • 如何检查列值是否有多余的空格?
  • sql中的ltrim和rtrim函数
  • 你能分享将数据保存到数据库的代码吗?另外,我确定您已经这样做了,但我建议您重新检查列的数据类型

标签: c# mysql sql-server


【解决方案1】:

根据Microsoft 你需要设置SET ANSI_PADDING OFF
请注意,现有的列不会因更改设置而受到影响,只有新的列

【讨论】:

【解决方案2】:

你可以实际检查的东西很少

检查存储过程参数以确保它们也是 nvarchar,因为您的列类型在 nvarchar 中

正如 Cyber​​ Progs 所说,检查 ANSI_PADDING

SET ANSI_PADDING  OFF

【讨论】:

    【解决方案3】:

    在将数据传递到数据库时在代码中使用 trim。

    例如:p.Add("@FirstName", model.FirstName.Trim());

    【讨论】:

    • 修剪!不用于将 varchar 转换为 nvarchar。请阅读如何添加好的答案以在堆栈溢出链接中提供最佳反馈:stackoverflow.com/help
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2020-02-05
    • 2017-01-06
    • 2018-11-22
    • 1970-01-01
    • 2013-04-29
    • 2011-12-24
    • 2021-04-25
    相关资源
    最近更新 更多