c# - 阅读器关闭时调用 Read 的尝试无效。你可以帮助我
问题描述
我不知道是什么问题,您可以帮我找到解决方案并解决问题,Decrypt() 是解密代码的方法
var test = Decrypt(cli);
DataTable dt = new DataTable();
conn.Open();
SqlDataReader myReader = null;
SqlCommand id_c = new SqlCommand("Select * From ResearcherInformation where Email='" + test + "'", conn);
myReader = id_c.ExecuteReader();
while (myReader.Read())
{
var idid = myReader["Id_Researcher"].ToString();
conn.Close();
ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('access');", true);
}
myReader.Close();
conn.Close();
解决方案
您正在关闭循环中间的连接:
while (myReader.Read())
{
var idid = myReader["Id_Researcher"].ToString();
conn.Close();
ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('access');", true);
}
这就是为什么一旦您第二次遍历阅读器,连接就会关闭。不要这样做:
while (myReader.Read())
{
var idid = myReader["Id_Researcher"].ToString();
ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('access');", true);
}
使用后关闭连接,而不是在使用时关闭。
还有一些值得注意的事情:
- 您依赖于可注入 SQL 的做法。这既是一个主要的安全漏洞,也是一个非常常见的错误来源。使用查询参数将值视为值而不是可执行代码。这是开始示例的好地方:https ://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ado-net-code-examples Google 搜索“C# 参数化查询”会发现更多的。
- 看看
using
你的SqlConnection
对象和其他实现IDisposable
. - 您不会将
idid
变量用于任何事情,因此您可以摆脱它。你也从不使用dt
,所以你也可以摆脱它。
推荐阅读
- arrays - 在 React js 中过滤后分配一个常量
- java - 如何在嵌套布局中显示自定义 View 类?
- c# - 使用 Single InstanceContextMode 在 WCF 服务上调用异步方法
- javascript - 如何在 asp.net 文本框中的 java-script 中使用数组值实现自动完成,
- ios - Pod 更新后找不到“Parse/PFFile.h”文件
- django - 模型上的日期验证 - 时间/日期冲突
- azure - azure logic app 如何检查 sftp 中的特定文件已更改
- c# - Resharper - 更喜欢带有支持字段的代码样式
- javascript - 如何从多行和多列的表格中获取选定的复选框并作为回复发送
- android - 如何测试 androidx.fragment.app.Fragment.onCreateOptionsMenu()?