当我试图将一些数据插入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 个空格字符
什么应该是错的?
答案 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)