C# 在单击一个按钮时使用多个sql查询时出现问题
我使用下面的代码,它工作得很好C# 在单击一个按钮时使用多个sql查询时出现问题,c#,asp.net,sql,mysql,C#,Asp.net,Sql,Mysql,我使用下面的代码,它工作得很好 protected void Button2_Click(object sender, EventArgs e) { String a = DropDownList1.SelectedItem.Value; String b = DropDownList3.SelectedItem.Value.PadLeft(3, '0'); String c = TextBox2.Text.PadLeft(5,
protected void Button2_Click(object sender, EventArgs e)
{
String a = DropDownList1.SelectedItem.Value;
String b = DropDownList3.SelectedItem.Value.PadLeft(3, '0');
String c = TextBox2.Text.PadLeft(5,'0').ToString();
String d = TextBox3.Text.ToString();
String digit = a+ b + c + d;
try
{
myConn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=testcase;User=root;Password=root;Option=3;");
myConn.Open();
//**
string sql = "select * from testcase.main where reg_no =?";
//**
OdbcCommand cmd = new OdbcCommand(sql, myConn);
//**
cmd.Parameters.AddWithValue("?", digit);
MyReader = cmd.ExecuteReader();
//**
while (MyReader.Read())
{
String f = MyReader["pet_name"].ToString();
String g = MyReader["res_name"].ToString();
Label9.Visible = true;
Label9.Text = f;
Label10.Visible = true;
Label10.Text = "VS";
//Label11.Visible = true;
Label11.Text = g;
}
MyReader.Close();
}
catch (Exception e1)
{
Response.Write(e1.ToString());
}
finally
{
if (MyReader != null && !MyReader.IsClosed)
{
MyReader.Close();
}
if (myConn != null && myConn.State == ConnectionState.Open)
{
myConn.Close();
}
}
我想添加另一个sql查询,它使用两个表来获取数据,然后在从数据库获取数据后,我想在dropdownlist中显示它
我应该如何进行??
我应该创建一个全新的连接吗?
我尝试了很多不同的方法,比如,创建新的连接和新的阅读器,以及我再次编码的整个try-and-catch块,但在运行网站时,我需要很长时间才能加载内容
我所做的只是修改了下面这个部分的代码,并再次使用了整个try-catch,但它无法工作
while (MyReader1.Read())
{
String f = MyReader1["ret"].ToString();
DropDownList1.Items.Add(f);
}
请提供帮助。是的,您应该创建一个新连接和一个新读卡器。最好尽快打开和关闭连接。如果内容加载需要一段时间,那么很可能不是连接创建。查看sql表的索引或加载内容的方式 从外观上看,如果您的查询返回多个结果,而我猜它不是?,那么您将一次又一次地覆盖同一个标签 您应该在using语句中包装您的OdbcConnection对象和MyReader对象。这样您就不需要.close语句&Finally块。有点干净
private void DoSomething()
{
String a = DropDownList1.SelectedItem.Value;
String b = DropDownList3.SelectedItem.Value.PadLeft(3, '0');
String c = TextBox2.Text.PadLeft(5, '0').ToString();
String d = TextBox3.Text.ToString();
String digit = a + b + c + d;
String sql = "select * from testcase.main where reg_no =?";
try
{
using (OdbcConnection myConn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=testcase;User=root;Password=root;Option=3;"))
using(OdbcCommand cmd = new OdbcCommand(sql, myConn))
{
myConn.Open();
//**
cmd.Parameters.AddWithValue("?", digit);
using (odbcReader MyReader = cmd.ExecuteReader())
{
//**
while (MyReader.Read())
{
String f = MyReader["pet_name"].ToString();
String g = MyReader["res_name"].ToString();
Label9.Visible = true;
Label9.Text = f;
Label10.Visible = true;
Label10.Text = "VS";
//Label11.Visible = true;
Label11.Text = g;
}
}
}
}
}
catch (Exception e1)
{
Response.Write(e1.ToString());
}
}
}
编辑-修复了嵌套语句(如果加载需要很长时间),然后检查有多少项添加到下拉列表中。此外,还可以将表的内容提取到DataTable中,然后使用foreach循环将项添加到下拉列表中。寻找将数据放入数据表的步骤。然后,使用以下循环:
String f;
foreach(DataRow dr in myTable.Rows)
{
f = dr["ret"].ToString();
DropDownList1.Items.Add(f);
}
这将加快这一进程
谢谢,
Vamyip您不需要新连接。您只需要一个新的命令和读取器。基本上你需要从新命令到阅读器的一切。重新关闭。拉罗:你忘了提到连接池。只要连接字符串完全相同,CLR就可能重用这些连接,额外的打开/关闭开销就会消失。所以只需使用两个独立的代码块,让CLR进行优化。。。连接字符串和事务状态!错误1不能在for、use、fixed或declaration语句中使用多个类型,使用OdbcConnection myConn=new OdbcConnectionDriver={MySQL ODBC 3.51 Driver};服务器=本地主机;数据库=测试用例;用户=根用户;密码=根;选项=3;,OdbcCommand cmd=newodbccommandsql,myConnHi-Ishan,我修复了嵌套语句。现在试试看。