- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我从 MySql 中的表中选择数据的代码:
MySqlDataReader msdr;
MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();
string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;";
cmd.CommandText = commandLine;
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@token", token);
cmd.Connection = connect;
cmd.Connection.Open();
msdr = cmd.ExecuteReader();
//do stuff.....
msdr.Close();
cmd.Connection.Close();
如你所见,我关闭了这两个:
msdr.Close();
cmd.Connection.Close();
我想问一下我是否需要关闭这两个?或者只关闭 cmd.Connection.Close();
我问它的原因是有时我在尝试选择表中的数据时会遇到此错误:详细信息:MySql.Data.MySqlClient.MySqlException:连接过多
我想知道是不是因为我没有关闭这个连接。
最佳答案
最好的编码如下
using(MySqlConnection connect = new MySqlConnection(connectionStringMySql))
using(MySqlCommand cmd = new MySqlCommand())
{
string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;";
cmd.CommandText = commandLine;
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@token", token);
cmd.Connection = connect;
cmd.Connection.Open();
using(msdr = cmd.ExecuteReader())
{
//do stuff.....
} // <- here the DataReader is closed and disposed.
} // <- here at the closing brace the connection is closed and disposed as well the command
using statement将使您的连接保持关闭和处置以及命令对象。无需在 MySqlConnection 或 MySqlDataReader 上显式调用 Close,因为 using 语句也会为您执行此操作,以防在连接打开和关闭之间的代码中触发异常
在您的原始代码中,只需使用命令、数据读取器或连接本身关闭一次连接就足够了,因为它们使用相同的对象实例,但如果您遇到异常,那么您的代码将无法关闭连接因此你冒着“打开太多连接”问题的风险
C# 8.0 更新
在这个版本的语言中,对 using 语句有一个小而有用的增强。它叫做using declaration
有了这个改变,上面的代码就可以去掉 using block 周围的大括号
using MySqlConnection connect = new MySqlConnection(connectionStringMySql);
using MySqlCommand cmd = new MySqlCommand();
string commandLine = "SELECT id,token FROM Table WHERE id = @id AND token = @token;";
.....
cmd.Connection.Open();
using msdr = cmd.ExecuteReader();
//do stuff.....
当方法退出时,所有的 using 声明将处理它们各自声明的变量
关于c# - MySqlDataReader 关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16887621/
作为通过屏幕抓取将数据导入 WordPress 的项目的一部分,我将新旧 URL 的数据库表存储在 MySQL 数据库中。在下面的示例中,ExecuteReader 命令似乎没有返回任何数据(-1 行
我在 VB.NET 中有一个函数,可以在启动主应用程序之前对 MySQL 数据库的用户进行身份验证。这是函数的代码: Public Function authConnect() As Bool
这是我从 MySql 中的表中选择数据的代码: MySqlDataReader msdr; MySqlConnection connect = new
MySqlCommand status = new MySqlCommand("select name_ru from request_status where id = '50'", con
这个问题在这里已经有了答案: Return DataReader from DataLayer in Using statement (4 个答案) 关闭 10 年前。 好的,我的代码目前是:
这个问题已经有答案了: What 'length' parameter should I pass to SqlDataReader.GetBytes() (2 个回答) 已关闭 10 年前。 我对
我有一个代码,它只是从 Mysql 中的列值中获取无符号字节。 MySqlDataReader reader = MasterServer.Instance.Sql_Connection.Reader
我在将信息从数据库加载到标签和图片框中时遇到问题。我认为我的代码可以正确执行我想要的操作,但我猜不是,因为它不起作用。下面是我正在使用的代码。对于数据库中的图片列,我存储图片的路径,而不是实际的 bl
我正在开发一个 C# 项目,目前我遇到了 MySQL 数据读取器的问题。 下面是我正在使用的代码 try { using (ConnectMySQLDB db = new ConnectMyS
我有两个数据库,一个是本地的,另一个是远程的。我可以使用 MySqlDataReader 从本地获取数据,但即使我成功连接也无法从远程获取数据。我尝试创建另一个 MySqlDataReader 对象,
这是 atm 代码: if (e.KeyCode == Keys.Enter && chatTextRTB.Text.Length > 0) { con.
我很高兴以前有人问过这个问题,但是,我在过去 5 天里一直在搜索 SO 和网络,但尚未找到解决我的问题的方法。 我正在尝试使用 C# 从 MySQL 数据库检索记录。 代码编译得很好,但是当我测试应用
我正在使用 MySql 和 C#。我有这个代码: public List selectStudent() { List stud = new List();
我需要在我的 MySQL 结果中将“,”替换为“.” string.Replace(",", "."); 当前代码: mysql.Connection.Open(); mysql.Co
我正在尝试从表中提取值,但 MySQLDataReader 似乎不想与我合作。 conn = new MySqlConnection(Credentials); conn.Open(); MySqlC
我想在调用者上返回值,例如我可以使用 asd["columnname"] 但我收到一个错误,示例/代码如下。 我有这个代码 public static MySqlDataReader QueryRes
存储过程: BEGIN SELECT * FROM `user` WHERE `EmailAddress`= @p0 AND `Password` = @p1; END @p0 和@p1 是 Varc
在数据库中插入或更新某些内容后使用 MySqlDataReader 时,我收到 System.NullReferenceException。 这是我的代码: protected void Page_L
有没有办法访问和分配高列的第 (i+1) 个或第 (I-1) 个值? 我的代码如下: public static List Read_DB1(string date, MySqlConnection
我有一个类,我的 MysqlConnection 就在里面: public class DB { private static MySqlConnection _Connection;
我是一名优秀的程序员,十分优秀!