SQL Server字符串填充插入空格 - 为什么?

时间:2012-03-02 16:08:03

标签: c# sql-server sqldatatypes

当我试图将一些数据插入SQL Server时,有这些额外的字符

例如我的textBox1.text == "SAMPLE"
那么这就是代码

string qry = "insert into FinalImages (FinalImageName, Date) values(@FinalImageName, @Date)";

SqlConnection c = new SqlConnection(c_string);
//Initialize SqlCommand object for insert
SqlCommand SqlCom = new SqlCommand(qry, c);

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, 40)).Value = textBox1.Text;
SqlCom.Parameters.Add(new SqlParameter("@Date", SqlDbType.Char, 40)).Value = DateTime.Now.ToString("MM/dd/yyyy");

但是当我在表格中检查记录为"SAMPLE "时,它添加了 34 个空格字符 什么应该是错的?

5 个答案:

答案 0 :(得分:12)

不要使用SqlDbType.Char,请使用NVarChar。 Char是一个固定大小的字符串,填充空格(一个可怕的怪物)。

答案 1 :(得分:7)

您选择CHAR(40)作为参数类型。你的意思是VARCHAR(40)

答案 2 :(得分:7)

您正在使用char(40)。这样,您将始终拥有一个长度为40的字符串。如果它更短,SQL-Server将自动用空格填充其余部分。
Char通常仅用于固定长度的数据,例如CustomerNumbers

在这种情况下,您希望使用varchar(40)来获取可变长度。

答案 3 :(得分:1)

您指定参数长度为40个字符且不是可变长度:

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, ***40***)).Value = textBox1.Text;

因此,它有助于填充您提供的值。

只使用不带长度参数的重载,并使用VarChar:

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.VarChar)).Value = textBox1.Text;

答案 4 :(得分:0)

运行

  

将ANSI_PADDING设置为OFF;

     

GO

更全面的信息是SET ANSI_PADDING

如果执行此操作,则需要更新所有现有记录以使用ltrim()/ rtrim()删除填充,因为关闭填充不会影响现有记录 RTRIM (Transact-SQL)