Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在单击一个按钮时使用多个sql查询时出现问题_C#_Asp.net_Sql_Mysql - Fatal编程技术网

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,我修复了嵌套语句。现在试试看。