[英]How to insert a list of object to mysql stored procedure
我有一个控制器,它接受一个对象列表,然后将其插入已经完成的数据库中,但是我认为如果有大量数据,我的代码将出现问题。
我的密码
public void SaveAnswers(List<questionModel.SAVEDANSWER> answers, int userid)
{
string query = "INSERT INTO answer (QUESTIONID,USERANSWERID, USERID) VALUES (@qid, @aid,@uid);";
using (MySqlConnection myconn = new MySqlConnection(cmn.connstring))
{
myconn.Open();
for (int i = 0; i <= answers.Count - 1; i++)
using (MySqlCommand myCmd = new MySqlCommand(query, myconn))
{
myCmd.CommandType = System.Data.CommandType.Text;
MySqlParameter questionid = myCmd.Parameters.AddWithValue("@qid", answers[i].QUESTIONID);
myCmd.Parameters.AddWithValue("@qid", answers[i].QUESTIONID);
myCmd.Parameters.AddWithValue("@aid", answers[i].ANSWERID);
myCmd.Parameters.AddWithValue("@uid", userid);
myCmd.ExecuteNonQuery();
}
myconn.Close();
myconn.Dispose();
}
}
我在SQL Server中做了类似的事情。 我将对象列表插入到数据表中,然后将数据表传递给存储过程。
在我的SQL Server存储过程中,我有一个表参数。
我可以在MySQL中做类似的事情吗?
您可以对列表构建器使用多个插入行方法(假设所有都是整数)
public void SaveAnswers(List<questionModel.SAVEDANSWER> answers, int userid)
{
StringBuilder query = new StringBuilder("INSERT INTO answer (QUESTIONID,USERANSWERID, USERID) VALUES";
using (MySqlConnection myconn = new MySqlConnection(cmn.connstring))
{
List<String> Rows = new List<String>();
for (int i = 0; i <= answers.Count - 1; i++)
{
Rows.Add(string.Format("({0},{1},{2})", (answers[i].QUESTIONID), (answers[i].ANSWERID),(answers[i].userId)));
}
query.Append(string.Join(",", Rows));
query.Append(";");
myconn.Open();
using (MySqlCommand myCmd = new MySqlCommand(query.ToString(), myconn))
{
myCmd.CommandType = CommandType.Text;
myCmd.ExecuteNonQuery();
}
myconn.Close();
}
}
如果使用的是C#6,则可以在foreach语句中尝试对查询进行字符串插值。
public void SaveAnswers(List<questionModel.SAVEDANSWER> answers, int userid)
{
using (MySqlConnection myconn = new MySqlConnection(cmn.connstring))
{
myconn.Open();
foreach(var item in answers)
{
//do string interpolation of your query.
var myCmd = new MySqlCommand($@"INSERT INTO answer (QUESTIONID,USERANSWERID, USERID) VALUES ({item.QUESTIONID}, {item.ANSWERID},{userid})", myconn))
myCmd.CommandType = System.Data.CommandType.Text;
myCmd.ExecuteNonQuery();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.