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