在表单上加载数据库的多个数据加载
我想在表单加载的数据库中获取多个数据。但是我发现代码很长并且重复。有人可以让这个代码缩短一点吗?在表单上加载数据库的多个数据加载
这是我的代码
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();
}
}
}
}
首先要连接到同一个数据库中所有的两倍。 而你用同样的方法来做它(很明显,你是否完全决定是否只连接一次)。
其次你可以将实际的选择执行包装在一个单独的方法中。 这个单独的方法应该从调用者那里接收它的连接(因为你可以在这种特殊情况下只连接到数据库,但是可以根据需要进行多次选择)。
三,不要使用ExecuteReader,请使用ExecuteScalar。
更多:你不应该在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);
}
}
关闭但你的代码中很少有错误,你在哪里声明了命令类型?并且您没有将连接分配给命令对象。 – 2013-02-25 15:43:22
方法GetRoomName_BasedOn_RoomNumber没有重载'需要1个参数.. – 2013-02-25 15:46:42
好吧..对不起'布特那。被带走了。请检查编辑 – 2013-02-25 15:47:28
例如,你可以重构你的代码和下面的代码提取到一个方法:
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();
}
}
}
这可能更适合CodeReview ... codereview.stackexchange.com,但是它可以做得更干净一点。例如......你真的需要有两个字段为同一个连接字符串? – Arran 2013-02-25 15:32:08