c# - 使用 C# 的 SQL 中的空格

标签 c# sql whitespace

我有一个用 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/

相关文章:

c# - 使用 Roslyn 创建命名空间代码重构

c# - 安卓 XAMARIN : Camera intent is returning with null data in callback

c# - 使用功能区回调意味着什么?

mysql - 'G.Id' 中的未知列 'on clause'

css - 为什么 `white-space` 在 IE 和 Firefox 之间不一致?

.net - string.Trim() 会从文件名中删除 *valid* 字符吗?

c# - Xamarin.Forms 中可重用的 XAML 控件

mysql - 在更新中打开同一个表两次

MySql:如何在声明语句之前调用存储过程

javascript - 从 JavaScript 转换为 Angular