Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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,有没有其他方法可以将多个对象插入MySQL数据库,而不是此处所示的方法。这是可行的,但执行起来需要时间 using (MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connStr)) { //Goes thrue the List<object> foreach(List<obje

有没有其他方法可以将多个对象插入MySQL数据库,而不是此处所示的方法。这是可行的,但执行起来需要时间

  using (MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connStr))
        {
            //Goes thrue the List<object>
            foreach(List<object> sub in listSubject)
            {
            MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "CALL stp_InsertSubject(@param_SubjectId, @param_ProjectId, @param_Used);";
            cmd.Parameters.AddWithValue("@param_SubjectId",Convert.ToInt32(sub[0]) );
            cmd.Parameters.AddWithValue("@param_ProjectId", Convert.ToInt32(sub[1]));
            cmd.Parameters.AddWithValue("@param_Used", Convert.ToBoolean(sub[2]) );

            conn.Open();

            cmd.ExecuteNonQuery();

            conn.Close();
                }
开始 在
Subject\u中插入项目值(
Subject\u Id
Projects\u Id
Used
)(参数SubjectId,参数ProjectId,参数Used);
结束

您考虑过用一个事务处理这些调用吗?

您考虑过用一个事务处理这些调用吗?

您可以尝试一下。在
foreach
循环外部打开连接。这将节省每次在循环中打开和关闭连接的时间。这将提高性能

Int64 Id = 0;
using (MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connStr))
{
    //Goes through the List<object>
    conn.Open();
    foreach(List<object> sub in listSubject)
    {
        MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "CALL stp_InsertSubject(@param_SubjectId, @param_ProjectId, @param_Used);";
        cmd.Parameters.AddWithValue("@param_SubjectId",Convert.ToInt32(sub[0]) );
        cmd.Parameters.AddWithValue("@param_ProjectId", Convert.ToInt32(sub[1]));
        cmd.Parameters.AddWithValue("@param_Used", Convert.ToBoolean(sub[2]) );
        Id = (Int64)cmd.ExecuteScalar();
    }
     conn.Close();
}
Int64 Id=0;
使用(MySql.Data.MySqlClient.MySqlConnection conn=new MySql.Data.MySqlClient.MySqlConnection(connStr))
{
//浏览清单
conn.Open();
foreach(listSubject中的列表子对象)
{
MySql.Data.MySqlClient.MySqlCommand cmd=new MySql.Data.MySqlClient.MySqlCommand();
cmd.Connection=conn;
cmd.CommandText=“调用stp_InsertSubject(@param_SubjectId、@param_ProjectId、@param_Used);”;
cmd.Parameters.AddWithValue(“@param_subject”,转换为32(sub[0]);
cmd.Parameters.AddWithValue(“@param_ProjectId”,Convert.ToInt32(sub[1]);
cmd.Parameters.AddWithValue(“@param_Used”,Convert.ToBoolean(sub[2]);
Id=(Int64)cmd.ExecuteScalar();
}
康涅狄格州关闭();
}

你可以试试。在
foreach
循环外部打开连接。这将节省每次在循环中打开和关闭连接的时间。这将提高性能

Int64 Id = 0;
using (MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connStr))
{
    //Goes through the List<object>
    conn.Open();
    foreach(List<object> sub in listSubject)
    {
        MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "CALL stp_InsertSubject(@param_SubjectId, @param_ProjectId, @param_Used);";
        cmd.Parameters.AddWithValue("@param_SubjectId",Convert.ToInt32(sub[0]) );
        cmd.Parameters.AddWithValue("@param_ProjectId", Convert.ToInt32(sub[1]));
        cmd.Parameters.AddWithValue("@param_Used", Convert.ToBoolean(sub[2]) );
        Id = (Int64)cmd.ExecuteScalar();
    }
     conn.Close();
}
Int64 Id=0;
使用(MySql.Data.MySqlClient.MySqlConnection conn=new MySql.Data.MySqlClient.MySqlConnection(connStr))
{
//浏览清单
conn.Open();
foreach(listSubject中的列表子对象)
{
MySql.Data.MySqlClient.MySqlCommand cmd=new MySql.Data.MySqlClient.MySqlCommand();
cmd.Connection=conn;
cmd.CommandText=“调用stp_InsertSubject(@param_SubjectId、@param_ProjectId、@param_Used);”;
cmd.Parameters.AddWithValue(“@param_subject”,转换为32(sub[0]);
cmd.Parameters.AddWithValue(“@param_ProjectId”,Convert.ToInt32(sub[1]);
cmd.Parameters.AddWithValue(“@param_Used”,Convert.ToBoolean(sub[2]);
Id=(Int64)cmd.ExecuteScalar();
}
康涅狄格州关闭();
}
需要改进的地方有:

  • 在环路外只打开一次连接(无需关闭 (使用时)
  • 创建命令,在循环之前只分配一次连接
  • 使用虚拟值在循环之前创建所有参数
  • 仅在循环内赋值并调用ExecuteScalar()

使用(MySql.Data.MySqlClient.MySqlConnection conn=new MySql.Data.MySqlClient.MySqlConnection(connStr))
{  
conn.Open();
MySql.Data.MySqlClient.MySqlCommand cmd=new MySql.Data.MySqlClient.MySqlCommand();
cmd.Connection=conn;
cmd.CommandText=“调用stp_InsertSubject(@param_SubjectId、@param_ProjectId、@param_Used);”;
cmd.Parameters.AddWithValue(“@param_SubjectId”,0);
cmd.Parameters.AddWithValue(“@param_ProjectId”,0);
cmd.Parameters.AddWithValue(“@param_Used”,false);
foreach(listSubject中的列表子对象)
{   
cmd.Parameters[“@param_SubjectId”].Value=Convert.ToInt32(sub[0]);
cmd.Parameters[“@param_ProjectId”].Value=Convert.ToInt32(sub[1]);
cmd.Parameters[“@param_Used”].Value=Convert.ToBoolean(sub[2]);
Id=(Int64)cmd.ExecuteScalar();
}   
}   
需要改进的地方很少:

  • 在环路外只打开一次连接(无需关闭 (使用时)
  • 创建命令,在循环之前只分配一次连接
  • 使用虚拟值在循环之前创建所有参数
  • 仅在循环内赋值并调用ExecuteScalar()

使用(MySql.Data.MySqlClient.MySqlConnection conn=new MySql.Data.MySqlClient.MySqlConnection(connStr))
{  
conn.Open();
MySql.Data.MySqlClient.MySqlCommand cmd=new MySql.Data.MySqlClient.MySqlCommand();
cmd.Connection=conn;
cmd.CommandText=“调用stp_InsertSubject(@param_SubjectId、@param_ProjectId、@param_Used);”;
cmd.Parameters.AddWithValue(“@param_SubjectId”,0);
cmd.Parameters.AddWithValue(“@param_ProjectId”,0);
cmd.Parameters.AddWithValue(“@param_Used”,false);
foreach(listSubject中的列表子对象)
{   
cmd.Parameters[“@param_SubjectId”].Value=Convert.ToInt32(sub[0]);
cmd.Parameters[“@param_ProjectId”].Value=Convert.ToInt32(sub[1]);
cmd.Parameters[“@param_Used”].Value=Convert.ToBoolean(sub[2]);
Id=(Int64)cmd.ExecuteScalar();
}   
}   

您需要向我们展示
stp_InsertSubject
做了什么来准确回答这个问题……您的
Id=(Int64)cmd.ExecuteScalar()每次在循环中都获得覆盖。您需要向我们展示
stp_InsertSubject
的具体操作,以回答这个问题…您的
Id=(Int64)cmd.ExecuteScalar()每次在循环中都得到覆盖。诅咒我的慢手指!这可能是在不改变插入方法的情况下解决问题的最佳方法。诅咒我的慢手指!这可能是在不改变插入方法的情况下解决问题的最佳方法。为什么要使用伪值。为什么不直接用显式类型创建参数?@ConradFrix我试图给出一个示例,但无法正确格式化代码为什么要使用伪值。为什么不直接用显式类型创建参数?@ConradFrix我试图给出一个示例,但无法正确格式化代码

using(MySql.Data.MySqlClient.MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connStr))
{  
    conn.Open(); 
    MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand();   
    cmd.Connection = conn;   
    cmd.CommandText = "CALL stp_InsertSubject(@param_SubjectId, @param_ProjectId, @param_Used);";  
    cmd.Parameters.AddWithValue("@param_SubjectId",0 );   
    cmd.Parameters.AddWithValue("@param_ProjectId", 0);   
    cmd.Parameters.AddWithValue("@param_Used", false );   
    foreach(List<object> sub in listSubject)   
    {   
        cmd.Parameters["@param_SubjectId"].Value = Convert.ToInt32(sub[0]) ;   
        cmd.Parameters["@param_ProjectId"].Value = Convert.ToInt32(sub[1]);   
        cmd.Parameters["@param_Used"].Value = Convert.ToBoolean(sub[2]);   
        Id = (Int64)cmd.ExecuteScalar();   
    }   
}