在这种情况下是否应该组合SQL命令

时间:2012-09-07 15:26:29

标签: sql c#-4.0

我有以下c#代码:

基本上我从TableA / Database1中选择一行并将其插入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();
            }
        }
    }
}

我将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();
            }
        }
    }
}    

1 个答案:

答案 0 :(得分:0)

我会做的是:

  1. 打开connection1并从第一个数据库中选择所需的所有数据。将此数据存储在某个对象中。
  2. 打开连接2并根据步骤1中创建的对象中存储的值更新第二个数据库。
  3. 这将使您能够使用一个连接到每个数据库并完成与上面相同的操作。

    如果您需要进一步的帮助,请告诉我。