1

私は次のc#コードを持っています:

基本的に、TableA / Database1から1つの行を選択し、それをTableA/Database2に挿入しています。

次に、接続を再度開き、TableB / Database1から複数の行を選択して(TableA / Database1から取得したnewIDを使用)、TableB/Database2に挿入します。

私の質問は、これを行うのが正しいアプローチですか?または、これらを組み合わせる必要がありますか?これらを組み合わせる必要がある場合、誰かがこれを達成するための最良の方法を教えてもらえますか?

int newID = 0;
using (var con1 = new SqlConnection(conString1))
using (var con2 = new SqlConnection(conString2))
{
    con1.Open();
    con2.Open();
    using (var selectCommand = new SqlCommand(sqlSelect, con1))
    {
        using (var reader = selectCommand.ExecuteReader())
        {
            try
            {
                if (reader != null)
                    if (reader.Read())
                    {
                        using (var insertCommand = new SqlCommand(sqlInsert, conTarget))
                        {
                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                insertCommand.Parameters.AddWithValue(
                                    "@" + reader.GetName(i), reader[i]);
                            }
                            newID = (int)insertCommand.ExecuteScalar();
                        }
                    }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                reader.Close();
            }
        }
    }
}

selectの例の1つの値としてnewIDを渡しています。

Select Id, student as newID, Class from Student where class = 10

using (var con1 = new SqlConnection(ConString1))
{
    con1.Open();               
    var cmd = new SqlCommand(query , con1);
    var reader = cmd.ExecuteReader();

    using (var con2 = new SqlConnection(conString2))
    {
        con2.Open();

        using (var sbc = new SqlBulkCopy(conString2))
        {
            sbc.BulkCopyTimeout = 2000;
            sbc.DestinationTableName = "student";
            try
            {
                if (reader != null) 
                    sbc.WriteToServer(reader);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {                            
                reader.Close();
            }
        }
    }
}    
4

1 に答える 1

0

私がすることは次のようなものです:

  1. connection1 を開き、最初のデータベースから必要なすべてのデータを選択します。このデータを何らかのオブジェクトに保存します。
  2. 接続 2 を開き、手順 1 で作成したオブジェクトに格納されている値に基づいて 2 番目のデータベースを更新します。

これにより、各データベースへの 1 つの接続を使用して、上記と同じことを実行できます。

さらにサポートが必要な場合はお知らせください。

于 2012-09-07T15:34:09.080 に答える