0

あるテーブルを別のテーブルにコピーするために使用するこのコードがありますが、コマンドステートメントの実行中にエラーが発生しました。

エラーは、接続が開いていないか有効ではないことを示しています。デバッグすると、開いていることがわかります。なぜ有効でないのか本当にわかりません。

con.ConnectionString = ConfigurationManager.ConnectionStrings["Con2"].ConnectionString;
con.Open();
cmd = new MySqlCommand("SELECT COUNT(*) FROM " + ConfigSettings.ReadSetting("main_base"), con);
int nRows = Convert.ToInt32(cmd.ExecuteScalar());
con.Close();
if (nRows > 0)
{
    con.ConnectionString = ConfigurationManager.ConnectionStrings["Con1"].ConnectionString;
    con.Open();
    cmd = new MySqlCommand("INSERT INTO temp_data SELECT * FROM data");
    cmd.ExecuteScalar();
}

最後のコマンドまですべてがうまくいきます:

cmd = new MySqlCommand("INSERT INTO temp_data SELECT * FROM data");
cmd.ExecuteScalar();

これら 2 つのデータベースが異なるサーバー上にある場合でも、これは可能ですか? たぶん、同時に2つの接続を開く必要がありますか?

4

2 に答える 2

2

MySqlCommand接続オブジェクトをコンストラクターに渡します。

cmd = new MySqlCommand("INSERT INTO temp_data SELECT * FROM data", con);
于 2012-05-28T17:09:40.230 に答える
0
using (var conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["Con2"].ConnectionString))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText ="SELECT COUNT(*) FROM " + ConfigSettings.ReadSetting("main_base");
        int nRows = Convert.ToInt32(cmd.ExecuteScalar());
        if (nRows > 0)
        {
            using (var conn2 = new MySqlConnection(ConfigurationManager.ConnectionStrings["Con1"].ConnectionString))
            {
                conn2.Open();
                using (var cmd2 = conn2.CreateCommand())
                {
                    cmd2.CommandText ="INSERT INTO temp_data SELECT * FROM data";
                    cmd2.ExecuteScalar();
                }
            }
        }
    }
}
于 2012-05-28T17:12:17.043 に答える