单击按钮时使用多个SQL查询的问题

时间:2010-11-16 12:08:23

标签: 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,'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查询,它使用两个表来获取数据,而不是我想在从数据库中获取数据后在下拉列表中显示它。

我该怎么办? 我应该创建一个全新的连接吗? 我尝试了许多不同的方法,比如创建新的连接和新的阅读器以及我再次编码的整个尝试和捕获块,但是在运行网站时我花了很长时间来加载内容。

我做了什么我只修改了这一部分(在代码下面)并再次使用了整个try catch但它有效。

while (MyReader1.Read())
            {
                String f = MyReader1["ret"].ToString();

             DropDownList1.Items.Add(f);

            }

请帮忙。

2 个答案:

答案 0 :(得分:0)

是的,你应该创建一个新的连接和一个新的阅读器。最好尽快打开和关闭连接。如果内容需要一段时间才能加载,则很可能不是连接创建。查看sql表的索引或如何加载内容。

从它的外观来看,如果你的查询返回多个结果(我猜它不是?),你将会覆盖相同的标签。

你应该包装你的OdbcConnection对象&使用语句中的MyReader对象。这样你就不需要.close语句&最后阻止。它有点清洁。

      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());
        }
    }

}

编辑 - 修复了嵌套语句

答案 1 :(得分:0)

如果需要很长时间才能加载,请检查下拉列表中添加了多少项目。此外,您可以将表的内容提取到DataTable中,然后使用foreach循环将项添加到下拉列表中。查看here以获取将数据导入数据表的步骤。然后,使用以下循环:

String f;
foreach(DataRow dr in myTable.Rows)
{
    f = dr["ret"].ToString();
    DropDownList1.Items.Add(f);

}

这应该加快这个过程。

谢谢,
Vamyip