已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。
代码如下:
static void Main(string[] args)
{
SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder();
connectionStringBuilder.InitialCatalog = "DWYS";
connectionStringBuilder.DataSource = "127.0.0.1";
connectionStringBuilder.UserID = "sa";
connectionStringBuilder.Password = "meirenai.";
connectionStringBuilder.MultipleActiveResultSets = true;
SqlConnection sqlConnection = new SqlConnection(connectionStringBuilder.ToString());
sqlConnection.Open();
SqlCommand cmd = new SqlCommand("SELECT [username],[password] FROM [dbo].[user]", sqlConnection);
SqlDataReader sqlDataReader = cmd.ExecuteReader();
Console.WriteLine(cmd.ExecuteNonQuery());
sqlConnection.Close();
}
求解答
正常情况我们建议新人使用 DataTable,而不是dataReader
虽然某个园子会告诉你们用reader好,不过飙车这种事情,还是等能正常上路了在说。
你这里差个sqlDataReader.close(),虽然就一句话差别。但是就像飙车一样,多踩一脚油门就需要有多踩一脚油门的处理技术
你这代码暂时只是个异常,不过很多入门的新人会在下面在写个循环套循环,N个循环就有N个reader,conn还都是open的。
这样连接池有多少个都不够你用的,一个普通功能20个人并发访问就挂了
【以下回答由 GPT 生成】
根据问题的描述和提供的代码,这是一个使用 C# 语言连接数据库并执行查询的问题。问题的提示是 "已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。",说明在执行 ExecuteNonQuery() 方法之前需要关闭 SqlDataReader 对象。下面是解决该问题的步骤和代码:
static void Main(string[] args)
{
SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder();
connectionStringBuilder.InitialCatalog = "DWYS";
connectionStringBuilder.DataSource = "127.0.0.1";
connectionStringBuilder.UserID = "sa";
connectionStringBuilder.Password = "meirenai.";
connectionStringBuilder.MultipleActiveResultSets = true;
using (SqlConnection sqlConnection = new SqlConnection(connectionStringBuilder.ToString()))
{
sqlConnection.Open();
using (SqlCommand cmd = new SqlCommand("SELECT [username],[password] FROM [dbo].[user]", sqlConnection))
{
using (SqlDataReader sqlDataReader = cmd.ExecuteReader())
{
while (sqlDataReader.Read())
{
// 读取数据行的username和password列
string username = sqlDataReader["username"].ToString();
string password = sqlDataReader["password"].ToString();
Console.WriteLine($"Username: {username}, Password: {password}");
}
}
}
}
}
解决该问题的方法是使用 using
语句来管理对象的生命周期,并在使用完后自动释放资源。在上面的代码中,使用了三个 using
语句分别管理 SqlConnection、SqlCommand 和 SqlDataReader 对象。在这种情况下,当代码块结束时,这些对象会自动关闭和释放资源,同时也会关闭与之关联的 DataReader 对象。
另外,使用 ExecuteNonQuery()
方法执行查询是错误的,该方法用于执行不返回结果集的 SQL 语句(如 INSERT、UPDATE 或 DELETE)。对于 SELECT 查询,应该使用 ExecuteReader()
方法来获取结果集。在上面的代码中,使用了 Read()
方法来逐行读取结果集中的数据,并输出到控制台。
希望以上解答对你有帮助。如果还有任何问题,请随时提问。
【相关推荐】