在窗体加载时获取数据库上的多个数据
本文关键字:数据 数据库 窗体 加载 获取 | 更新日期: 2023-09-27 18:00:54
我想在表单加载中获取数据库上的多个数据。但我发现代码很长而且重复。有人能把这个代码短一点吗?
这是我的代码
private void Form1_Load(object sender, EventArgs e)
{
string a = label1.Text;
string connString = "Server=Localhost;Database=this;Uid=root;password=root";
using (var connection = new MySqlConnection(connString))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = ("Select Room_name from firstfloor where Room_no=(?room)");
command.Parameters.AddWithValue("?room", a);
command.ExecuteNonQuery();
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
button1.Text = reader["Room_name"].ToString();
}
}
}
string b = label2.Text;
string connString2 = "Server=Localhost;Database=this;Uid=root;password=root";
using (var connection = new MySqlConnection(connString2))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = ("Select Room_name from firstfloor where Room_no=(?room)");
command.Parameters.AddWithValue("?room", b);
command.ExecuteNonQuery();
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
button2.Text = reader["Room_name"].ToString();
}
}
}
}
首先,您要连接到同一个数据库两次。而且你是用同样的方法来做的(很明显,你完全有权决定是否只连接一次(。
其次,您可以将实际的select执行封装在一个单独的方法中。这个单独的方法应该从调用方接收它的连接(这样在这种特殊情况下,您就可以只连接一次数据库,但可以根据需要进行任意多的选择(。
第三,不要使用ExecuteReader,使用ExecuteScalar。
Furthemore:你不应该在FormLoad上做太多的事情(UI会冻结(。为什么要根据标签的值查询数据库?这只是你写得很快的一个样本,向我们展示你的意思吗?还是实际的商业逻辑?
private string GetRoomName_BasedOn_RoomNumber(string roomNumber, MyConnection connection) {
using (var command = connection.CreateCommand())
{
command.CommandText = ("Select Room_name from firstfloor where Room_no=(?room)");
command.Parameters.AddWithValue("?room", roomNumber);
//command.ExecuteNonQuery();
object response = command.ExecuteScalar();
return response as string; // consider <null> as a "No such Room Number" signal
}
}
private void Form1_Load(object sender, EventArgs e)
{
string a = label1.Text;
string b = label2.Text;
string connString = "Server=Localhost;Database=this;Uid=root;password=root";
using (var connection = new MySqlConnection(connString))
{
connection.Open();
button1.Text = this.GetRoomName_BasedOn_RoomNumber(a, connection);
button2.Text = this.GetRoomName_BasedOn_RoomNumber(b, connection);
}
}
例如,您可以重构代码并将以下代码提取到方法中:
private void DoSomething(MySqlConnection connection)
{
using (var command = connection.CreateCommand())
{
command.CommandText = ("Select Room_name from firstfloor where Room_no=(?room)");
command.Parameters.AddWithValue("?room", b);
command.ExecuteNonQuery();
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
button2.Text = reader["Room_name"].ToString();
}
}
}