现有数据库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);
};
}
}
}
}
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);
};
}
}
}
}
最好将数据取到(可以定时同步方式)你可以写的SQLServer侧进行处理。
主要是在aTable中的name不固定,按条件变化的,而且有可能很多条;
参数化查询bTable时条件不用name=:name,改能用集合行吗?如where name in (集合)