【问题标题】:Fetching Data from MySQL and Inserting it in MS SQL SERVER in visual studio c#从 MySQL 获取数据并将其插入 Visual Studio C# 中的 MS SQL SERVER
【发布时间】:2020-06-16 11:56:19
【问题描述】:

我正在尝试从 Mysql 数据库中读取表并将其全部存储在 c# 中的 ms sql 服务器中我正在正确地从 mysql 中读取我的问题是如何在代码的第二部分中存储我在 ms sql 中读取的数据 string constring= ConfigurationManager.ConnectionStrings["cnxMysql"].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();

【问题讨论】:

  • 你已经写了INSERT INTO i_evt但是什么?缺少值/选择子句。
  • 您的 cmd2 命令文本并不像@Nilay 所说的那样完整,您需要传递值。
  • 是的,请阅读我所说的,我卡在那里我不知道如何将我从 mysql 读取的数据获取到数据应该去的 ms sql 中
  • @ElyesJarroudi - 我希望this solution 解决了您的问题。如果是,您可以通过将答案标记为已接受来帮助社区。为了将其标记为已接受,您需要单击答案左侧的大复选标记 ✓。接受的答案有助于未来的访问者自信地使用该解决方案。您也可以查看this 了解如何接受答案。如有任何疑问/问题,请随时在答案下方发表评论。

标签: c# mysql sql .net


【解决方案1】:

我有一个反向问题,我必须将数据从 MS SQL Server 传输到 MySQL。 我在下面使用了 sn-p,但我个人不推荐将此用于生产,因为它会逐行添加数据。但是您可以将它用于小型数据集或本地环境。您可以根据需要添加 try-catch 以及自定义。仅供参考。

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;
}

【讨论】:

    【解决方案2】:

    参考下面的代码,你可以优化这段代码,因为有很大的优化空间,但这对于初学者来说很容易理解基础水平:

    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();
    

    【讨论】:

    • 你这样做是为了学习还是这是你的任务..还有另一种方法可以做到这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多