Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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_Wordpress - Fatal编程技术网

C# 远程mysql在循环中插入表的速度非常慢

C# 远程mysql在循环中插入表的速度非常慢,c#,mysql,wordpress,C#,Mysql,Wordpress,我试图在循环中插入大量文本文件中的项目。该循环显然是一个while循环,在文本文件的每一行发送sendtodb命令。使用本地数据库速度非常快(190万个插页需要大约4个小时),但在远程mysql服务器上进行此操作时,每秒托管1个插页,这可能需要几天或几周!有什么想法吗 private void sendtodb(string image, string title, string content, int cat) { string cs = @"the conn

我试图在循环中插入大量文本文件中的项目。该循环显然是一个while循环,在文本文件的每一行发送sendtodb命令。使用本地数据库速度非常快(190万个插页需要大约4个小时),但在远程mysql服务器上进行此操作时,每秒托管1个插页,这可能需要几天或几周!有什么想法吗

    private void sendtodb(string image, string title, string content, int cat)
    {
        string cs = @"the connection string";
        MySqlConnection conn = null;
conn = new MySqlConnection(cs);
            conn.Open();
        try
        {

            MySqlCommand cmd = new MySqlCommand("", conn);

            cmd.CommandText = "INSERT INTO wp_posts (post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt,post_status,comment_status,ping_status,post_password,post_name,to_ping,pinged,post_modified,post_modified_gmt,post_content_filtered,post_parent, guid,menu_order,post_type,post_mime_type,comment_count) "
                + "VALUES (@post_author, @post_date, @post_date_gmt, @post_content, @post_title, @post_excerpt,@post_status,@comment_status,@ping_status,@post_password,@post_name,@to_ping,@pinged,@post_modified,@post_modified_gmt,@post_content_filtered,@post_parent, @guid, @menu_order, @post_type, @post_mime_type, @comment_count)";

            //  cmd.Parameters.Add("?ID", MySqlDbType.VarChar).Value = "1";
            cmd.Parameters.Add("@post_author", MySqlDbType.Int32).Value = 1;
            cmd.Parameters.Add("@post_date", MySqlDbType.DateTime).Value = DateTime.Now;
            cmd.Parameters.Add("@post_date_gmt", MySqlDbType.DateTime).Value = DateTime.Now;
            cmd.Parameters.Add("@post_content", MySqlDbType.Text).Value = content;
            cmd.Parameters.Add("@post_title", MySqlDbType.Text).Value = title;
            cmd.Parameters.Add("@post_excerpt", MySqlDbType.VarChar).Value = "";
            cmd.Parameters.Add("@post_status", MySqlDbType.VarChar).Value = "publish";
            cmd.Parameters.Add("@comment_status", MySqlDbType.VarChar).Value = "open";
            cmd.Parameters.Add("@ping_status", MySqlDbType.VarChar).Value = "open";
            cmd.Parameters.Add("@post_password", MySqlDbType.VarChar).Value = "";
            cmd.Parameters.Add("@post_name", MySqlDbType.VarChar).Value = "";

            cmd.Parameters.Add("@to_ping", MySqlDbType.Text).Value = "";
            cmd.Parameters.Add("@pinged", MySqlDbType.Text).Value = "";

            cmd.Parameters.Add("@post_modified", MySqlDbType.DateTime).Value = DateTime.Now;
            cmd.Parameters.Add("@post_modified_gmt", MySqlDbType.DateTime).Value = DateTime.Now;
            cmd.Parameters.Add("@post_content_filtered", MySqlDbType.LongText).Value = "";
            cmd.Parameters.Add("@post_parent", MySqlDbType.Int32).Value = 0;
            cmd.Parameters.Add("@guid", MySqlDbType.VarChar).Value = "";

            cmd.Parameters.Add("@menu_order", MySqlDbType.Int32).Value = 0;
            cmd.Parameters.Add("@post_type", MySqlDbType.VarChar).Value = "post";
            cmd.Parameters.Add("@post_mime_type", MySqlDbType.VarChar).Value = "";
            cmd.Parameters.Add("@comment_count", MySqlDbType.Int32).Value = 0;
            cmd.ExecuteNonQuery();

            cmd.CommandText = "select * from wp_posts order by ID desc LIMIT 1";
            MySqlDataReader dataReader = cmd.ExecuteReader();
            int idcolumn = 0;
            while (dataReader.Read())
            {
                idcolumn = Convert.ToInt32(dataReader["ID"]);
            }
            dataReader.Close();

            cmd.CommandText = "INSERT INTO wp_postmeta (post_id,meta_key,meta_value)" + "VALUES (@post_id,@meta_key,@meta_value)";

            cmd.Parameters.Add("@post_id", MySqlDbType.Int32).Value = idcolumn;
            cmd.Parameters.Add("@meta_key", MySqlDbType.VarChar).Value = "Image";
            cmd.Parameters.Add("@meta_value", MySqlDbType.LongText).Value = image;
            cmd.ExecuteNonQuery();

            cmd.CommandText = "INSERT INTO wp_term_relationships (object_id,term_taxonomy_id,term_order)" + "VALUES (@object_id,@term_taxonomy_id,@term_order)";

            cmd.Parameters.Add("@object_id", MySqlDbType.Int32).Value = idcolumn;
            cmd.Parameters.Add("@term_taxonomy_id", MySqlDbType.Int32).Value = cat;
            cmd.Parameters.Add("@term_order", MySqlDbType.Int32).Value = 0;
            cmd.ExecuteNonQuery();


            textBox4.Text = idcolumn.ToString();

            textBox2.Text = "MySQL version : " + conn.ServerVersion;

        }
        catch (MySqlException ex)
        {
            textBox2.Text = ex.ToString();

        }
        finally
        {
            if (conn != null)
            {
                conn.Close();
            }
        }
    }

这是一个庞大的wordpress数据库

您是否尝试在一个mysql请求中插入多行

INSERT INTO example
  (example_id, name, value, other_value)
VALUES
  (100, 'Name 1', 'Value 1', 'Other 1'),
  (101, 'Name 2', 'Value 2', 'Other 2'),
  (102, 'Name 3', 'Value 3', 'Other 3'),
  (103, 'Name 4', 'Value 4', 'Other 4');

您应该在代码之外连接到DB。现在,每个插入只进行一个连接,效率低得离谱

这些步骤应该是:

connection to database
while(have data) {
    use connection to insert data
}
disconnect from database

由于使用服务器端代码插入查询,在连接、来回发送数据方面浪费了太多时间,因此需要一个本地的sql端解决方案


只需创建一个sql文件,其中填充需要插入的查询,以
分隔并使用
源代码
语法将其加载到mysql服务器上。这将确保以最快的方式插入这些行,因为您不会在服务器端代码上浪费宝贵的时间。

删除
PHP
标记。这与此无关。插入是从本地到远程还是从本地远程进行的?也可以考虑使用<代码>事务< /代码>。也许会有帮助。更不用说,希望你不要每次推都连接。。。我真的希望你不要这样做,代码是错误的。只是要注意超过了。此外,通过网络发送这样一个巨大的字符串可能会在网络级别出错。是否曾经有过从internet下载1GB文件并被破坏的经历?不好玩