如何为未知计数的对象列表创建 MySql 参数?
How can I create MySql parameters for a list of objects with unknown count?
我想为列表中的每个对象插入一行。此列表的计数未知,但始终为 10 个或更少。
"insert into achievement(Rank,Event,UserId) values(@rank,@event,@userid);"
知道了这一点,values
.
的参数集合最多可以有10个
所以基本上我的问题是:如何使用可变数量的对象(不总是 10 个)简短地执行以下代码?
"insert into achievement(Rank,Event,UserId) values(@rank1,@event1,@userid) (@rank2,@event2,@userid) (@rank3,@event3,@userid) (@rank4,@event4,@userid) (@rank5,@event5,@userid) (@rank6,@event6,@userid) (@rank7,@event7,@userid) (@rank8,@event8,@userid) (@rank9,@event9,@userid) (@rank10,@event10,@userid)"
List<Achievement> achievementDTOs;
command.Parameters.AddWithValue("rank1", dto1.Rank);
command.Parameters.AddWithValue("event1", dto1.Event);
command.Parameters.AddWithValue("rank2", dto2.Rank);
command.Parameters.AddWithValue("event2", dto2.Event);
command.Parameters.AddWithValue("rank3", dto3.Rank);
command.Parameters.AddWithValue("event3", dto3.Event);
command.Parameters.AddWithValue("rank4", dto4.Rank);
command.Parameters.AddWithValue("event4", dto4.Event);
command.Parameters.AddWithValue("rank5", dto5.Rank);
command.Parameters.AddWithValue("event5", dto5.Event);
command.Parameters.AddWithValue("rank6", dto6.Rank);
command.Parameters.AddWithValue("event6", dto6.Event);
command.Parameters.AddWithValue("rank7", dto7.Rank);
command.Parameters.AddWithValue("event7", dto7.Event);
command.Parameters.AddWithValue("rank8", dto8.Rank);
command.Parameters.AddWithValue("event8", dto8.Event);
command.Parameters.AddWithValue("rank9", dto9.Rank);
command.Parameters.AddWithValue("event9", dto9.Event);
command.Parameters.AddWithValue("rank10", dto10.Rank);
command.Parameters.AddWithValue("event10", dto10.Event);
您可以循环遍历您的成就列表并添加一组新参数,并在每次循环时为查询添加一些新文本。像这样:
List<Achievement> achievementDTOs; //we'll assume this is actually populated
string sql = "insert into achievement(Rank,Event,UserId) values ";
string valueSQL = "";
for (int i = 0; i < achievementDTOs.Count; i++) // Loop through List with for
{
valueSQL += (valueSQL == "" ? "", ",") + "(@event"+i+", @rank"+i+", @user"+i+")";
command.Parameters.AddWithValue("event"+i, achievementDTOs[i].Event);
command.Parameters.AddWithValue("rank"+i, achievementDTOs[i].Rank);
command.Parameters.AddWithValue("user"+i, achievementDTOs[i].UserID);
}
sql += valueSQL;
//...and now you can execute the SQL
您也可以尝试创建如下动态参数
MySqlParameter[] myparam = new MySqlParameter[]{
new MySqlParameter("columnname1",columnvalue1),
new MySqlParameter("columnname2",columnvalue2),
};
然后使用参数作为插入、更新或select
的参数
我想为列表中的每个对象插入一行。此列表的计数未知,但始终为 10 个或更少。
"insert into achievement(Rank,Event,UserId) values(@rank,@event,@userid);"
知道了这一点,values
.
所以基本上我的问题是:如何使用可变数量的对象(不总是 10 个)简短地执行以下代码?
"insert into achievement(Rank,Event,UserId) values(@rank1,@event1,@userid) (@rank2,@event2,@userid) (@rank3,@event3,@userid) (@rank4,@event4,@userid) (@rank5,@event5,@userid) (@rank6,@event6,@userid) (@rank7,@event7,@userid) (@rank8,@event8,@userid) (@rank9,@event9,@userid) (@rank10,@event10,@userid)"
List<Achievement> achievementDTOs;
command.Parameters.AddWithValue("rank1", dto1.Rank);
command.Parameters.AddWithValue("event1", dto1.Event);
command.Parameters.AddWithValue("rank2", dto2.Rank);
command.Parameters.AddWithValue("event2", dto2.Event);
command.Parameters.AddWithValue("rank3", dto3.Rank);
command.Parameters.AddWithValue("event3", dto3.Event);
command.Parameters.AddWithValue("rank4", dto4.Rank);
command.Parameters.AddWithValue("event4", dto4.Event);
command.Parameters.AddWithValue("rank5", dto5.Rank);
command.Parameters.AddWithValue("event5", dto5.Event);
command.Parameters.AddWithValue("rank6", dto6.Rank);
command.Parameters.AddWithValue("event6", dto6.Event);
command.Parameters.AddWithValue("rank7", dto7.Rank);
command.Parameters.AddWithValue("event7", dto7.Event);
command.Parameters.AddWithValue("rank8", dto8.Rank);
command.Parameters.AddWithValue("event8", dto8.Event);
command.Parameters.AddWithValue("rank9", dto9.Rank);
command.Parameters.AddWithValue("event9", dto9.Event);
command.Parameters.AddWithValue("rank10", dto10.Rank);
command.Parameters.AddWithValue("event10", dto10.Event);
您可以循环遍历您的成就列表并添加一组新参数,并在每次循环时为查询添加一些新文本。像这样:
List<Achievement> achievementDTOs; //we'll assume this is actually populated
string sql = "insert into achievement(Rank,Event,UserId) values ";
string valueSQL = "";
for (int i = 0; i < achievementDTOs.Count; i++) // Loop through List with for
{
valueSQL += (valueSQL == "" ? "", ",") + "(@event"+i+", @rank"+i+", @user"+i+")";
command.Parameters.AddWithValue("event"+i, achievementDTOs[i].Event);
command.Parameters.AddWithValue("rank"+i, achievementDTOs[i].Rank);
command.Parameters.AddWithValue("user"+i, achievementDTOs[i].UserID);
}
sql += valueSQL;
//...and now you can execute the SQL
您也可以尝试创建如下动态参数
MySqlParameter[] myparam = new MySqlParameter[]{
new MySqlParameter("columnname1",columnvalue1),
new MySqlParameter("columnname2",columnvalue2),
};
然后使用参数作为插入、更新或select
的参数