Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET中正确使用SqlConnection_C#_Sqlconnection - Fatal编程技术网

C# 在.NET中正确使用SqlConnection

C# 在.NET中正确使用SqlConnection,c#,sqlconnection,C#,Sqlconnection,我只是想就使用SqlConnection对象的正确用法或正确设计发表意见。以下2项中哪一项是最佳用途: 一个数据提供程序类,其方法(每个方法)包含SqlConnection对象(完成后释放)。比如: IList<Employee> GetAllEmployees() { using (SqlConnection connection = new SqlConnection(this.connectionString)) { // Code goes here...

我只是想就使用SqlConnection对象的正确用法或正确设计发表意见。以下2项中哪一项是最佳用途:

一个数据提供程序类,其方法(每个方法)包含SqlConnection对象(完成后释放)。比如:

IList<Employee> GetAllEmployees() 
{ 
  using (SqlConnection connection = new SqlConnection(this.connectionString)) { 
  // Code goes here... 
  } 
} 

Employee GetEmployee(int id) 
{ 
  using (SqlConnection connection = new SqlConnection(this.connectionString)) { 
  // Code goes here... 
  } 
}   
IList GetAllEmployees()
{ 
正在使用(SqlConnection=newsqlconnection(this.connectionString)){
//代码在这里。。。
} 
} 
雇员GetEmployee(内部id)
{ 
正在使用(SqlConnection=newsqlconnection(this.connectionString)){
//代码在这里。。。
} 
}   

SqlConnection连接;//在构造函数中初始化
IList GetAllEmployees()
{ 
this.TryOpenConnection();//尝试打开成员SqlConnection实例
//代码在这里。。。
这个.CloseConnection();
//返回
} 
雇员GetEmployee(内部id)
{ 
this.TryOpenConnection();//尝试打开成员SqlConnection实例
//代码在这里。。。
这个.CloseConnection();
//返回
}

还是有比这更好的方法?我有一个集中的web爬虫类型的应用程序,该应用程序将同时爬网50个或更多的网站(多线程),每个网站包含在爬虫对象中,每个爬虫对象都有一个数据提供程序类的实例(如上)。

实际的数据库连接将被汇集。只要所有
SqlConnection
实例使用相同的连接字符串,它们实际上都使用相同的连接


我发现创建连接实例,使用它,然后处理它(在
使用
块中)更干净。这样,如果代码需要更改以使用不同的连接字符串、使用事务或其他任何内容,您就有了使更改可用的所有必要条件。

实际的数据库连接将被池化。只要所有
SqlConnection
实例使用相同的连接字符串,它们实际上都使用相同的连接


我发现创建连接实例,使用它,然后处理它(在
使用
块中)更干净。这样,如果代码需要更改以使用不同的连接字符串、使用事务或其他任何内容,那么您就有了使更改可用的所有必要条件。

可能并不真正相关,但我将任何连接对象与类实例级别分离的唯一时间是,当我想要创建一个与每个方法正在做的事情相关的清晰分离时。。。也许它太长了,需要重构成几个部分,每个部分都需要作为事务的一部分在同一个连接上操作


否则,我会坚持选择1。连接池基本上不会花费任何费用。

可能不是真正相关的,但我唯一将任何连接对象分离到类实例级别的时间是,当我想要创建一个与每个方法正在做的事情相关的清晰分离时。。。也许它太长了,需要重构成几个部分,每个部分都需要作为事务的一部分在同一个连接上操作


否则,我会坚持选择1。连接池基本上不会花费任何费用。

顺便说一句,这与C#无关
SqlConnection
是.NET的一部分,而不是C的一部分,对吧,我想放C会让别人知道我的代码样本是C的。无论如何,谢谢。这就是C#tag的作用。此外,任何查看代码的人都可以看到它是C#。谢谢@John。我以为标签是用来搜索的。无论如何,非常感谢你的想法。这真的很有帮助。嘿,你是从我们这里来的,你还没睡。:)它不是“仍然醒着”,而是“再次醒着”。标记用于搜索、筛选和信息。顺便说一句,这与C#无关
SqlConnection
是.NET的一部分,而不是C的一部分,对吧,我想放C会让别人知道我的代码样本是C的。无论如何,谢谢。这就是C#tag的作用。此外,任何查看代码的人都可以看到它是C#。谢谢@John。我以为标签是用来搜索的。无论如何,非常感谢你的想法。这真的很有帮助。嘿,你是从我们这里来的,你还没睡。:)它不是“仍然醒着”,而是“再次醒着”。标签用于搜索、过滤和信息。我只是想,如果有100多个网站被爬网并访问数据库(这只是一个数据库,但每个网站都与一个表相关),可能会有100多个连接(100是池大小的默认值吗?)。见鬼,我为什么懒惰:(@Jojo:不会有100个连接,只有100个SqlConnection实例。可能只有一个连接。此外,更好的方法是先让代码工作,然后再优化。我只是想如果有100多个网站被爬网并访问数据库(这只是一个数据库,但每个网站都与一个表相关),可以建立100多个连接(池大小是否默认为100)。见鬼,我为什么懒惰:(.@Jojo:不会有100个连接,只有100个SqlConnection实例。可能只有一个连接。此外,更好的方法是先让代码工作,然后再优化。
SqlConnection connection; // initialized in constructor 
IList<Employee> GetAllEmployees() 
{ 
  this.TryOpenConnection(); // tries to open member SqlConnection instance 
  // Code goes here... 
  this.CloseConnection(); 
  // return 
} 

Employee GetEmployee(int id) 
{ 
  this.TryOpenConnection(); // tries to open member SqlConnection instance 
  // Code goes here... 
  this.CloseConnection(); 
  // return 
}
Create a connection
Start transaction
Call a subroutine to update an order header (passing along the connection or get it from the instance)
Call a subroutine to update all order details (passing along the conneciton or get it from the instance)
End transaction
Close connection