在我的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 + "],";

10-04 10:35