2013-07-30 68 views
0

我正在尝试在我正在处理的C#程序上设置MySQL连接。我到了构建查询的地步。我的基本前提是,你在一个你要调用的类中有一个函数,它接受一个表名和一个带有列名和它们各自值(用于插入命令)的散列表。C# - 将变量添加到字符串中的特定点

例:

Hashtable hash = new Hashtable(); 
hash.Add("title", title); 
hash.Add("contents", content); 

db.Insert(stories, hash); 

所以,我的问题是,如何我可以遍历用插入法收到的哈希表,每次增加的关键和具体,变换位置值。

一个可能的查询是 “INSERT INTO KEY1KEY2)VALUES( '值1', '值2')”

我的困境是试图让键和值匹配在字符串中。

+5

你正在建设一个SQL注入机。 –

+1

使用参数。对于不是SQL的东西,请使用模板引擎。 – SLaks

+1

你做**不**要做这个。使用参数化查询,而不是从文本中构建它们 – Kevin

回答

0

您可以使用List来存储Hashtable中的列名和值,然后将它们连接到命令文本中。在遍历Hashtable时添加该命令的参数。

private void Insert(string tableName, Hashtable hash) 
{ 
    MySqlCommand command = new MySqlCommand(); 

    List<string> columnList = new List<string>(); 
    List<string> valueList = new List<string>(); 

    foreach (DictionaryEntry entry in hash) 
    { 
     columnList.Add(entry.Key.ToString()); 
     valueList.Add("@" + entry.Key.ToString()); 

     command.Parameters.AddWithValue("@" + entry.Key.ToString(), entry.Value); 
    } 

    command.CommandText = "INSERT INTO " + tableName + "(" + string.Join(", ", columnList.ToArray()) + ") "; 
    command.CommandText += "VALUES (" + string.Join(", ", valueList.ToArray()) + ")"; 

    command.ExecuteScalar(); 

}

相关问题