现有数据库A(本机SQL2005),数据库B(远程ORACLE,只有读取查询权限)。
A中有表aTable,有3个字段id、name、age。
B中有表bTable,有3个字段id、name、agein。
aTable中的name与bTable的name对应。
现在想根据aTable中的name,查bTable中的对应name的agein,而且aTable中的name很多,需要批量处理,目前我用循环实现的,但感觉循环查询次数太多,是否会对ORACLE库产生不良影响?还有没有更好的方法?DataTable myaTable = new DataTable();
//读取A库aTable中age>指定数 的人信息并存入临时myaTable
string constr = ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(constr))
{
     using (SqlCommand cmd = new SqlCommand())
     {
        string cmdstr = @"select name,age from aTable where age>@age ";
        cmd.Connection = conn;
        cmd.CommandText = cmdstr;
        cmd.Parameters.Add(new SqlParameter("age",TextBox_Age.Text));
        DataSet ds = new DataSet();
        SqlDataAdapter adp = new SqlDataAdapter(cmd);
         adp.Fill(ds);
         myaTable = ds.Tables[0];
     }
}
            //根据myaTable中的name从B库bTable中循环查询出对应agein并存入mybTable中
DataTable mybTable = new DataTable();
mybTable.Columns.Add("name", typeof(string));
         mybTable.Columns.Add("agein", typeof(int));
            string conoraclestr = ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString;
            using (OracleConnection conn = new OracleConnection(conoraclestr))
            {
                conn.Open();
                using (OracleCommand cmd = new OracleCommand())
                {
                    string cmdstr = @"select name,agein from bTable where name=:name";
                    cmd.Connection = conn;
                    cmd.CommandText = cmdstr;
//遍历myaTable来查询,可能循环上千次
                    foreach (DataRow row in myaTable.Rows)
                    {
                        cmd.Parameters.Clear();
                        cmd.Parameters.Add(new OracleParameter("name", row["name"].ToString()));
                        using (OracleDataReader rd = cmd.ExecuteReader())
                        {
                            while (rd.Read())
                            {
DataRow bRow = mybTable.NewRow();
bRow["name"] = rd["name"];
bRow["agein"] = rd["agein"];
mybTable.Rows.Add(bRow);
                            };
                        }
                    }
                }
            }

解决方案 »

  1.   

    在中间层使用代码处理性能太低。
    最好将数据取到(可以定时同步方式)你可以写的SQLServer侧进行处理。
      

  2.   

    我新手基础差,不太明白,呵呵,能详细点么
    主要是在aTable中的name不固定,按条件变化的,而且有可能很多条;
    参数化查询bTable时条件不用name=:name,改能用集合行吗?如where name in (集合)