Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将对象列表插入mysql存储过程_C#_Mysql - Fatal编程技术网

C# 如何将对象列表插入mysql存储过程

C# 如何将对象列表插入mysql存储过程,c#,mysql,C#,Mysql,我有一个控制器,它接受对象列表,然后将其插入数据库 我已经完成了,但是如果有大量数据,我认为我的代码会有问题 我的代码 public void SaveAnswers(List<questionModel.SAVEDANSWER> answers, int userid) { string query = "INSERT INTO answer (QUESTIONID,USERANSWERID, USERID) VALUES (@qid, @aid,

我有一个控制器,它接受对象列表,然后将其插入数据库 我已经完成了,但是如果有大量数据,我认为我的代码会有问题

我的代码

     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();
        }
    }
public void SaveAnswers(列出答案,int userid)
{
string query=“将值(@qid,@aid,@uid)插入到答案(QUESTIONID,USERANSWERID,USERID)中;”;
使用(MySqlConnection myconn=newmysqlconnection(cmn.connstring))
{
myconn.Open();
对于(inti=0;i如果您使用的是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();
        }       
    }   
}
public void SaveAnswers(列出答案,int userid)
{   
使用(MySqlConnection myconn=newmysqlconnection(cmn.connstring))
{
myconn.Open();
foreach(答案中的var项)
{
//对查询执行字符串插值。
var myCmd=new MySqlCommand($@“插入到答案(QUESTIONID,USERANSWERID,USERID)值({item.QUESTIONID},{item.ANSWERID},{USERID})”,myconn))
myCmd.CommandType=System.Data.CommandType.Text;
myCmd.ExecuteNonQuery();
}       
}   
}

您可以在列表生成器中使用多插入行方法(假设所有行都是整数)

public void SaveAnswers(列出答案,int userid)
{
StringBuilder查询=新的StringBuilder(“插入到答案(QUESTIONID、USERANSWERID、USERID)值中”;
使用(MySqlConnection myconn=newmysqlconnection(cmn.connstring))
{
列表行=新列表();

对于(int i=0;i用户定义的表类型在mysql中不可用。因此,不幸的是,您可以像在sql server中一样处理这种情况。使用
foreach
而不是
for
foreach和for有什么区别。thanksit不会改变任何东西。@Justcode也许您可以使用Parallel.foreach这是非常错误的。在每个循环中,您都可以断开连接。
 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();
        }
    }