插入时用空格填充SQL Server字符串-原因
本文关键字:Server 字符串 原因 SQL 填充 空格 插入 | 更新日期: 2023-09-27 18:26:23
当我试图将一些数据插入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空格字符
哪里出了问题?
不要使用SqlDbType.Char,使用NVarChar。Char是一个固定大小的字符串,用空格填充(一个可怕的怪物)。
您选择了CHAR(40)
作为参数类型。你的意思是VARCHAR(40)
。
您使用的是char(40)
。这样你就永远有一根长度为40的绳子。如果较短,SQL Server将自动用空格填充其余部分
Char通常只用于固定长度的数据,例如CustomerNumbers
在这种情况下,您希望使用varchar(40)
来获得可变长度。
您指定的参数长度为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;
运行
关闭ANSI_PADDING;
转到
更全面的信息是SET ANSI_PADDING
如果您这样做,您将需要更新所有现有记录以使用ltrim()/rtrim()删除填充,因为关闭填充不会影响现有记录RTRIM(Transact-SQL)