namespace ttt
{
public partial class student : Form
{
SqlConnection conn = new SqlConnection(@"Data Source=DESKTOP-R0N4ID3;Initial Catalog=testOnedb;Integrated Security=True");
SqlCommand com;
SqlDataReader read;
public student()
{
InitializeComponent();
com = new SqlCommand("select * from testOnetable",conn);
conn.Open();
com.ExecuteReader();
SqlDataReader read = com.ExecuteReader();
while (read.Read())
{
listBox1.Items.Add("the username : " + read["username"].ToString() + "\n the passward : " + read["passward"].ToString() + "\n the email : " + read["email"].ToString());
}
read.Close();
conn.Close();
}
}
}
答案 0 :(得分:0)
您需要将数据库交互元素(例如SqlConnection
和SqlDataReader
)的初始化包装在using
块中,以便在您使用时调用Dispose
方法与他们一起完成(或手动完成):
using (SqlCommand com = new SqlCommand("select * from testOnetable", conn))
using (SqlDataReader read = com.ExecuteReader()) {
....
}
关闭SqlDataReader
不会失去对事物的控制权(我不确定具体的技术细节)。
此外,每次构建新的student
实例时都打开一个新连接对数据库不利。您应该使用单例模式,并具有专用的数据访问对象类。
答案 1 :(得分:0)
您必须删除
> df[["partner"]] <- key[ match(df[['partner']], key[['name']] ) , 'id']
> df
name heart_rate age partner
1 J9 78 35 M4
2 M4 82 23 J9
3 A3 67 43 T7
4 T7 105 52 A3
5 L4 85 33 K5
6 K5 94 45 L4
在您的代码中,该行没有用,因为您没有将引用分配给阅读器(在下一行中,您将获得引用,并在变量“阅读器”中正确分配了引用)
答案 2 :(得分:0)
可能不希望您第一次拨打ExecuteReader()
。
更改
...
conn.Open();
com.ExecuteReader();
SqlDataReader read = com.ExecuteReader();
...
收件人:
...
conn.Open();
如果您有意同时打开两个阅读器,请在连接字符串中设置MultipleActiveResultSets=True
,如下所示:C# Using 2 sqldatareader at same time?
其他一些事情:您在这里处理SqlConnection
,SqlCommand
和SqlDataReader
的一次性用品。当不再需要它们时,应致电Dispose()
,以更好地将using
包裹在它们周围,以使它们自动处置。
将变量尽可能地保持本地化也是一个好主意。似乎连接不是命令或读者真正需要成为类的成员的原因,因为您仅在构造函数中使用它们。考虑将它们一起推入构造函数。这样,您也可以使用using
来处理它们。否则,您必须在其中添加和销毁并销毁它们。
public partial class student : Form
{
public student()
{
InitializeComponent();
using (SqlConnection conn = new SqlConnection(@"Data Source=DESKTOP-R0N4ID3;Initial Catalog=testOnedb;Integrated Security=True"))
{
conn.Open();
using (SqlCommand com = new SqlCommand("select * from testOnetable", conn))
{
using (SqlDataReader read = com.ExecuteReader())
{
while (read.Read())
{
listBox1.Items.Add("the username : " + read["username"].ToString() + "\n the passward : " + read["passward"].ToString() + "\n the email : " + read["email"].ToString());
}
read.Close();
}
}
conn.Close();
}
}
private void student_Load(object sender, EventArgs e)
{
}
}