C# Sql 客户端 - 无法插入名称以数字开头的参数化列

标签 c# sql insert prepared-statement

在我的SqlClient 类中,我以这种方式实现了Insert 方法。我必须将带有对(列名、值)的 Dictionary 传递给 Insert 方法,然后该方法构造参数化查询并执行命令。

    public void Insert(string table, Dictionary<string, object> values)
    {
        // build INSERT query
        string query = "INSERT INTO " + table + " (";

        foreach (KeyValuePair<string, object> pair in values)
            query += pair.Key + ",";

        query = query.Substring(0, query.Length - 1) + ")";
        query += "VALUES (";

        foreach (KeyValuePair<string, object> pair in values)
            query += "@" + pair.Key + ",";

        query = query.Substring(0, query.Length - 1) + ")";

        // create command from query
        using (SqlCommand command = new SqlCommand(query, connect))
        {
            foreach (KeyValuePair<string, object> pair in values)
                command.Parameters.Add(pair.Key, pair.Value);

            // execute command
            command.ExecuteNonQuery();
        }
    }

但是,我发现当值列表中有一些名称以数字开头的列时它不起作用,例如 1column。 (我知道这是糟糕的变量名,请告诉数据库所有者)。你能建议我一些方法让它工作吗?此外,您肯定会发现我的查询构建方式并不理想,所以如果您提出任何意见,我将不胜感激。

编辑:

  • 用双引号将列名称括起来 ("1column") 没有帮助。

最佳答案

用方括号将列名括起来,例如[1 列].

  string query = "INSERT INTO " + table + " (";

  foreach (KeyValuePair<string, object> pair in values)
        query += "[" + pair.Key + "],";

关于C# Sql 客户端 - 无法插入名称以数字开头的参数化列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32781217/

相关文章:

php - 转换时间格式为 HH :MM AM/PM to HH:MM:SS

mysql - 为每个用户更新 n 条记录

mysql - 如何增加 INSERT IGNORE 到 UNIQUE 列的数量?

hyperlink - TinyMCE 5.1.1 插入链接表单字段已禁用

linq-to-sql - 使用 Linq 插入数据

c# - asp.net core 1.0 web api使用camelcase

c# - 跨 .cake 文件共享全局变量

c# - 为什么我不能将 Foo<Bar> 转换为 IFoo<IBar>

c# - ef7 无法检索子集合的子对象的属性

带有 if then else 构造的 SQL 触发器