如何使用列表中的列名插入 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;
我有 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;