ASMX Web服务是一种基于SOAP的Web服务技术,属于.NET框架的一部分。ADO.NET是.NET框架中用于数据访问的组件集,提供对关系数据库的连接和操作能力。
ADO.NET默认启用连接池,这是管理多个数据库连接的高效方式:
// 连接字符串示例(包含连接池配置)
string connStr = "Data Source=server;Initial Catalog=db;User ID=user;Password=pass;Max Pool Size=100;Min Pool Size=10;";
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MultiDbService : WebService
{
// 多个数据库连接字符串
private static readonly string PrimaryDbConnStr = ConfigurationManager.ConnectionStrings["PrimaryDB"].ConnectionString;
private static readonly string SecondaryDbConnStr = ConfigurationManager.ConnectionStrings["SecondaryDB"].ConnectionString;
[WebMethod]
public DataSet GetDataFromMultipleSources()
{
DataSet result = new DataSet();
// 第一个数据库连接
using (SqlConnection conn1 = new SqlConnection(PrimaryDbConnStr))
{
SqlCommand cmd1 = new SqlCommand("SELECT * FROM Table1", conn1);
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
DataTable dt1 = new DataTable("Table1");
da1.Fill(dt1);
result.Tables.Add(dt1);
}
// 第二个数据库连接
using (SqlConnection conn2 = new SqlConnection(SecondaryDbConnStr))
{
SqlCommand cmd2 = new SqlCommand("SELECT * FROM Table2", conn2);
SqlDataAdapter da2 = new SqlDataAdapter(cmd2);
DataTable dt2 = new DataTable("Table2");
da2.Fill(dt2);
result.Tables.Add(dt2);
}
return result;
}
}
[WebMethod]
public bool UpdateMultipleDatabases()
{
bool success = false;
using (SqlConnection conn1 = new SqlConnection(PrimaryDbConnStr))
using (SqlConnection conn2 = new SqlConnection(SecondaryDbConnStr))
{
conn1.Open();
conn2.Open();
using (SqlTransaction trans1 = conn1.BeginTransaction())
using (SqlTransaction trans2 = conn2.BeginTransaction())
{
try
{
// 在第一个数据库执行操作
SqlCommand cmd1 = new SqlCommand("UPDATE Table1 SET Col1=@value", conn1, trans1);
cmd1.Parameters.AddWithValue("@value", "new value");
cmd1.ExecuteNonQuery();
// 在第二个数据库执行操作
SqlCommand cmd2 = new SqlCommand("UPDATE Table2 SET Col2=@value", conn2, trans2);
cmd2.Parameters.AddWithValue("@value", "new value");
cmd2.ExecuteNonQuery();
// 提交两个事务
trans1.Commit();
trans2.Commit();
success = true;
}
catch
{
trans1.Rollback();
trans2.Rollback();
throw;
}
}
}
return success;
}
using
语句确保连接被正确释放问题1:连接泄漏
using
块中或显式调用Close()/Dispose()
问题2:连接池耗尽
问题3:跨数据库事务不一致
通过以上方法,可以在ASMX Web服务中有效管理多个ADO.NET数据库连接,实现复杂的数据操作需求。
没有搜到相关的文章