如何使用列表中的列名插入 MySql

How to use Column Names from list into MySql insert

我有 2 个列表:

List<string> ColumnNames = new List<string>();
List<string> ValueNames = new List<string>();
ColumnNames = names.Keys.ToList();
ValueNames = names.Values.ToList();

我正在尝试将此列表用于 MySql 语句:

...
MySqlCommand command = conDataBase.CreateCommand();
command.CommandText = string.Format("insert into MyTable {0} values (?parameter)", string.Join(",", ColumnNames));
command.Parameters.AddWithValue("parameter", string.Join(",", ValueNames));
...

这里是语法错误

...
command.CommandText = "insert into MyTable (" + string.Join(",", ColumnNames) + ") values ('" + string.Join(",", ValueNames) + "')";
...

...
command.CommandText = "insert into MyTable (" + string.Join(",", ColumnNames) + ") values (?parameter)";
command.Parameters.AddWithValue("parameter", string.Join(",", ValueNames));
...

在最后 2 个代码中我遇到了错误“列数与第 1 行的值数不匹配,但是

ColumnNames.Count = ValueNames.Count

这是您可以 "script" 使用另一个问题中提供的答案:

string tableName = "Person";

// the names of the columns in your table    
var columnNames = new List<string> { "Name", "Age", "BirthDate" };

// the data you want to store in each column
var data = new List<string> { "Klaus", "22", "Before 2010" };

var myColumns = string.Join (", ", columnNames.Select (n => string.Format("[{0}]",n)));
var myParamColumns = string.Join (", ", columnNames.Select (n => string.Format("@{0}",n)));

using (var dbCommand = new SqlCommand() /*conDataBase.CreateCommand ()*/)
{ 
    dbCommand.CommandText = string.Format ("insert into {0}  ( {1} ) values ( {2} );", tableName, myColumns, myParamColumns);

    // your insert now looks like this:
    // insert into Person  ( [Name], [Age], [BirthDate] ) values ( @Name, @Age, @BirthDate );

    Console.WriteLine (dbCommand.CommandText);

    // then you add each single piece of data to each used @....    

    for (int i = 0; i < columnNames.Count; i++)
      dbCommand.Parameters.AddWithValue (columnNames[i], data[i]);

    dbCommand.ExecuteNonQuery ();
}

我找到了解决方案: https://www.codeproject.com/Questions/1225444/How-to-use-column-names-from-list-into-mysql-inser

List<string> ColumnNames = names.Keys.ToList()
List<string> ValueNames = names.Values.ToList();
List<string> RevValueNames = new List<string>();
ValueNames.ForEach(x => RevValueNames.Add("'" + x + "'"));
string Query = string.Format("insert into MyTable ({0}) values ({1})", string.Join(",", ColumnNames), string.Join(",", RevValueNames));
                command.CommandText = Query;