私は次の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();
}
}
}
}