Получение данных из MySQL и их вставка в MS SQL СЕРВЕР в Visual Studio c# - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь прочитать таблицу из базы данных Mysql и сохранить все это на сервере ms sql в c# я правильно читаю из mysql, моя проблема в том, как сохранить данные, которые я прочитал в ms sql во второй части строки кода constring = ConfigurationManager.ConnectionStrings ["cnx Mysql"]. ConnectionString;

        MySqlConnection conn = new MySqlConnection(constring);

        MySqlCommand cmd = new MySqlCommand("SELECT * FROM i_evt WHERE Updt=0",conn);

        conn.Open();


        cmd.ExecuteNonQuery();




        string constring2 = ConfigurationManager.ConnectionStrings["cnxsql"].ConnectionString;

        SqlConnection conn2 = new SqlConnection(constring2);

        SqlCommand cmd2 = new SqlCommand("INSERT INTO i_evt",conn2);

        conn2.Open();




        cmd2.ExecuteNonQuery();

        conn2.Close();
        conn.Close();

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

См. Код ниже, вы можете оптимизировать этот код, так как для оптимизации достаточно места, но новичку легко понять базовый уровень c уровень:

MySqlConnection conn = new MySqlConnection(constring);
MySqlCommand cmd = new MySqlCommand("SELECT * FROM i_evt WHERE Updt=0", conn);
conn.Open();
DataSet data;
using (MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(mySqlCommand))
    {
        data = new DataSet();
        sqlAdapter.Fill(data);
    }

string constring2 = ConfigurationManager.ConnectionStrings["cnxsql"].ConnectionString;
SqlConnection conn2 = new SqlConnection(constring2);
conn2.Open();
for (int i = 0; i < data.Tables[0].Rows.Count; i++)
    {
        SqlCommand cmd2 = new SqlCommand("INSERT INTO i_evt(column1,column2) values(@col1,@col1)", conn2);
        cmd2.Parameters.AddWithValue("col1", data.Tables[0].Rows[i][0].ToString());
        cmd2.Parameters.AddWithValue("col12", data.Tables[0].Rows[i][1].ToString());
        cmd2.ExecuteNonQuery();
    }
conn2.Close();
conn.Close();
0 голосов
/ 16 июня 2020

У меня обратная проблема, мне нужно перенести данные с сервера MS SQL на MySQL. Я использовал для этого фрагмент ниже, но я лично не рекомендую это для производства, поскольку он добавляет данные одну за другой. Но вы можете использовать его для небольшого набора данных или локальной среды. Вы можете добавить пробный вариант, а также настроить его по своему усмотрению. Это для справки.

public void Main()
{
    var table = GetDataTableFromSQLServer();
    AddToMySQL(table);
}

private DataTable GetDataTableFromSQLServer()
{
    var connection = GetSqlServerConnection();
    string query = "SELECT Column1, Column2 FROM TableName WHERE Column3 is NOT NULL";

    var command = new SqlCommand(query, connection);
    connection.Open();
    var reader = command.ExecuteReader();
    DataTable table = new DataTable();
    table.Load(reader);
    connection.Close();

    return table;
}

private void AddToMySQL(DataTable table)
{
    var connection = GetMySQLConnection();
    connection.Open();
    string query = "INSERT INTO TableName (column1, column2) VALUES(@column1, @column2);";

    int i = 0;
    foreach (DataRow row in table.Rows)
    {
        if (i % 1000 == 0)
        {
            // Closing & Reopening connection after 1000 records
            connection.Close();
            connection.Open();
        }

        Console.WriteLine($"Adding ({++i}/{table.Rows.Count})");

        MySqlCommand command = new MySqlCommand(query, connection);
        command.Parameters.Add(new MySqlParameter("@column1", MySqlDbType.Int64) { Value = row.Field<long>("column1").Trim() });
        command.Parameters.Add(new MySqlParameter("@column2", MySqlDbType.VarChar) { Value = row.Field<string>("column2").Trim() });

        var affectedRows = command.ExecuteNonQuery();
    }

    connection.Close();
}

private SqlConnection GetSqlServerConnection()
{
    string connectionString = @"Data Source=...";
    SqlConnection connection = new SqlConnection(connectionString);
    return connection;
}

private MySqlConnection GetMySQLConnection()
{
    MySqlConnectionStringBuilder connectionBuilder = new MySqlConnectionStringBuilder
    {
        Server = "...",
        Database = "...",
        UserID = "...",
        Password = "...",
        Port = 3306
    };

    MySqlConnection connection = new MySqlConnection(connectionBuilder.ToString());
    return connection;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...