我有一个用 C# 编写的连接到 SQL 数据库的 Windows 应用程序。
我的应用程序中有文本字段并像这样更新数据库:
string name = textBox60.Text;
string sql = "insert into myTable(Name) values ('" + name + "')";
DbHelper.ExecuteNonquery(sql);
public static int ExecuteNonquery(string sql)
{
using (SqlConnection cn = new SqlConnection(constr))
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
else if (cn.State == ConnectionState.Open)
{
cn.Close();
cn.Open();
}
else if (cn.State == ConnectionState.Broken)
{
cn.Close();
cn.Open();
}
using (SqlCommand cm = new SqlCommand(sql, cn))
{
return cm.ExecuteNonQuery();
}
}
}
但是对于数据库中每一个类型为nchar
的数据,它们都充满了空格。例如,如果我在文本字段中填写 abc,当我检查数据库时,它将变成 "abc_________________"
(空格),如下所示。
除了仅在我读取它们时修剪字符串或使用 UPDATE
data SET TRIM(data)
如果我有大量此类数据,如何防止这种情况。
感谢您的帮助。
最佳答案
But for every data with type nchar in the database, they are full of whitespaces.
是的,那是因为 nchar
类型是固定宽度的类型。您基本上是在告诉数据库您希望该字段的每个值的长度都为 20(或设置的任何值)。您应该改用 nvarchar
,它是一个可变宽度字段。
您还应该避免编写这样的代码:
string sql = "insert into myTable(Name) values ('" + name + "')";
相反,您应该使用参数化 SQL,在 SQL 本身中放置一个占位符参数,然后在命令中设置该参数的值。这将避免 SQL injection attacks ,数据转换问题,并使您的代码(SQL)与数据(参数)完全分开。不过,这意味着您需要更改辅助方法。 (您的辅助方法一开始看起来很奇怪 - 当然,当您刚刚创建连接时,您只需要打开它......当您没有在每个打电话?)
关于c# - 使用 C# 的 SQL 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609393/