WCF数据库连接:只有一个数据库连接
WCF database connection: only one database connection
我需要将 WCF 网络服务连接到 SQL 服务器数据库。我只需要使用 SQL 来访问数据,不需要 LINQ 或 Entity Framework.
我尝试按照本教程进行操作:
http://www.c-sharpcorner.com/UploadFile/rohatash/inserting-data-into-database-using-wcf-service/。 SqlConnection class 似乎是我需要使用的,但是当我看到这个服务方法时:
public string InsertUserDetails(UserDetails userInfo)
{
// ...
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Rajesh;User ID=sa;Password=wintellect");
con.Open();
SqlCommand cmd = new SqlCommand("insert into RegistrationTable(UserName,Password,Country,Email) values(@UserName,@Password,@Country,@Email)", con);
cmd.Parameters.AddWithValue("@UserName", userInfo.UserName);
cmd.Parameters.AddWithValue("@Password", userInfo.Password);
cmd.Parameters.AddWithValue("@Country", userInfo.Country);
cmd.Parameters.AddWithValue("@Email", userInfo.Email);
int result = cmd.ExecuteNonQuery();
// ...
}
我很担心,因为很明显,每个请求都会创建一个数据库连接。
这是我想要的代码结构示例:
public class Service : IService
{
public Company GetCompany(int key)
{
// Get existing database connection
// SELECT * from companies where c_key=key
// Return Company instance
}
}
我应该使用什么结构来使用 SQL 访问数据而不是在每个请求上创建数据库连接?我可以只将 SqlConnection 实例设为静态吗?我不明白 WCF 如何处理这个问题,将创建多少服务实例等。
感谢您的帮助!
只需确保每次打开和关闭它即可。
public class Service : IService
{
private static SQLConnection con;
public Company GetCompany(int key)
{
// Get existing database connection
// SELECT * from companies where c_key=key
// Return Company instance
}
}
通常最佳做法是仅在需要时保持连接打开。
您可以通过有效地管理资源来提高性能。 ADO.NET 数据提供程序对象实现 IDisposable
,它允许您使用 using statements 来确保这些对象及其非托管资源(例如数据库连接)得到正确且可预测的释放。
只要您在 SqlConnection
对象上调用 Dispose()
(进而调用 Close()
),它就会将连接释放回连接池。
现代 RDBMS 旨在同时处理成千上万个连接。作为开发人员,您的职责是确保仅在需要时保持连接打开。所以打开你的连接,运行 你的 SQL,得到你的结果,关闭你的连接。
关注与此类似的内容:
using (var conn = new SqlConnection(ConnectionString))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM SomeTable";
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// DO SOME WORK
}
}
}
}
您的连接代码和命令代码应使用 using 语句以确保正确清理。当您创建初始连接时,池将启动。当连接处理时,它将被释放到池中以供再次使用。您可以使用连接字符串控制池的大小。
我需要将 WCF 网络服务连接到 SQL 服务器数据库。我只需要使用 SQL 来访问数据,不需要 LINQ 或 Entity Framework.
我尝试按照本教程进行操作: http://www.c-sharpcorner.com/UploadFile/rohatash/inserting-data-into-database-using-wcf-service/。 SqlConnection class 似乎是我需要使用的,但是当我看到这个服务方法时:
public string InsertUserDetails(UserDetails userInfo)
{
// ...
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Rajesh;User ID=sa;Password=wintellect");
con.Open();
SqlCommand cmd = new SqlCommand("insert into RegistrationTable(UserName,Password,Country,Email) values(@UserName,@Password,@Country,@Email)", con);
cmd.Parameters.AddWithValue("@UserName", userInfo.UserName);
cmd.Parameters.AddWithValue("@Password", userInfo.Password);
cmd.Parameters.AddWithValue("@Country", userInfo.Country);
cmd.Parameters.AddWithValue("@Email", userInfo.Email);
int result = cmd.ExecuteNonQuery();
// ...
}
我很担心,因为很明显,每个请求都会创建一个数据库连接。
这是我想要的代码结构示例:
public class Service : IService
{
public Company GetCompany(int key)
{
// Get existing database connection
// SELECT * from companies where c_key=key
// Return Company instance
}
}
我应该使用什么结构来使用 SQL 访问数据而不是在每个请求上创建数据库连接?我可以只将 SqlConnection 实例设为静态吗?我不明白 WCF 如何处理这个问题,将创建多少服务实例等。 感谢您的帮助!
只需确保每次打开和关闭它即可。
public class Service : IService
{
private static SQLConnection con;
public Company GetCompany(int key)
{
// Get existing database connection
// SELECT * from companies where c_key=key
// Return Company instance
}
}
通常最佳做法是仅在需要时保持连接打开。
您可以通过有效地管理资源来提高性能。 ADO.NET 数据提供程序对象实现 IDisposable
,它允许您使用 using statements 来确保这些对象及其非托管资源(例如数据库连接)得到正确且可预测的释放。
只要您在 SqlConnection
对象上调用 Dispose()
(进而调用 Close()
),它就会将连接释放回连接池。
现代 RDBMS 旨在同时处理成千上万个连接。作为开发人员,您的职责是确保仅在需要时保持连接打开。所以打开你的连接,运行 你的 SQL,得到你的结果,关闭你的连接。
关注与此类似的内容:
using (var conn = new SqlConnection(ConnectionString))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM SomeTable";
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// DO SOME WORK
}
}
}
}
您的连接代码和命令代码应使用 using 语句以确保正确清理。当您创建初始连接时,池将启动。当连接处理时,它将被释放到池中以供再次使用。您可以使用连接字符串控制池的大小。