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

C# SQL Server字符串在插入时填充空格-为什么?,c#,sql-server,sqldatatypes,C#,Sql Server,Sqldatatypes,当我试图向SQL Server中插入一些数据时,出现了这些额外的字符 例如我的textBox1.text==“示例” 这就是密码 string qry = "insert into FinalImages (FinalImageName, Date) values(@FinalImageName, @Date)"; SqlConnection c = new SqlConnection(c_string); //Initialize SqlCommand object for insert S

当我试图向SQL Server中插入一些数据时,出现了这些额外的字符

例如我的
textBox1.text==“示例”

这就是密码

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是一个固定大小的字符串,用空格填充(一个可怕的怪物)。

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

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, ***40***)).Value = textBox1.Text;
因此,它有助于填充您提供的值

只需使用不接受length参数的重载,并使用VarChar:

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.VarChar)).Value = textBox1.Text;
您选择了
CHAR(40)
作为参数类型。您的意思是
VARCHAR(40)

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

在本例中,您希望使用
varchar(40)
来获取可变长度

运行

设置ANSI_填充

进一步的综合信息如下所示

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

您赢得了本周最差头衔奖。