【问题标题】:How to test to see if mySql Database is working?如何测试以查看 mySql 数据库是否正常工作?
【发布时间】:2012-11-26 23:22:48
【问题描述】:

我是 MySQL 数据库的新手,我正在使用 Visual Studio C# 连接到我的数据库。我有以下选择方法。如何运行它以检查它是否工作?

EDITED 打开和关闭连接方法

//Open connection to database
    private bool OpenConnection()
    {
        try
        {
           // connection.open();
            return true;
        }
        catch (MySqlException ex)
        {
            //When handling errors, your application's response based 
            //on the error number.
            //The two most common error numbers when connecting are as follows:
            //0: Cannot connect to server.
            //1045: Invalid user name and/or password.
            switch (ex.Number)
            {
                case 0:
                   MessageBox.Show("Cannot connect to server.");
                    break;

                case 1045:
                    MessageBox.Show("Invalid username/password, please try again");
                    break;
            }
            return false;
        }
    }

    //Close connection
    private bool CloseConnection()
    {
        try
        {
            connection.Close();
            return true;
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
            return false;
        }
    }

选择方法,与上图的关闭和打开连接在同一个类中

 public List<string>[] Select()
    {
        string query = "SELECT * FROM Questions";

        //Create a list to store the result
        List<string>[] list = new List<string>[3];
        list[0] = new List<string>();
        list[1] = new List<string>();
        list[2] = new List<string>();
        list[3] = new List<string>();
        list[4] = new List<string>();
        list[5] = new List<string>();
        list[6] = new List<string>();
        list[7] = new List<string>();

        //Open connection
        if (this.OpenConnection() == true)
        {
            //Create Command
            MySqlCommand cmd = new MySqlCommand(query, connection);
            //Create a data reader and Execute the command
            MySqlDataReader dataReader = cmd.ExecuteReader();

            //Read the data and store them in the list
            while (dataReader.Read())
            {
                list[0].Add(dataReader["id"] + "");
                list[1].Add(dataReader["difficulty"] + "");
                list[2].Add(dataReader["qustions"] + "");
                list[3].Add(dataReader["c_answer"] + "");
                list[4].Add(dataReader["choiceA"] + "");
                list[5].Add(dataReader["choiceB"] + "");
                list[6].Add(dataReader["choiceC"] + "");
                list[7].Add(dataReader["choiceD"] + "");
            }

            //close Data Reader
            dataReader.Close();

            //close Connection
            this.CloseConnection();

            //return list to be displayed
            return list;
        }
        else
        {
            return list;
        }
    }

此方法位于一个单独的类中,该类具有所有数据库连接设置。现在我想从我的主类中调用这个方法来测试它是否工作正常,我该怎么做呢?

【问题讨论】:

    标签: c# mysql database visual-studio-2010


    【解决方案1】:

    您应该创建该 DB 类的对象实例,然后调用 Select() 方法。
    所以,假设这个 DB 类被命名为QuestionsDB,你应该这样写:

    QuestionDB questionDAL = new QuestionDB();
    List<string>[] questions = questionDAL.Select();
    

    不过,在此之前,请更正这一行

    List<string>[] list = new List<string>[8];  // you need 8 lists for your db query
    

    如果您的数组列表中的第一个列表的元素超过零,您可以检查您是否有任何记录测试。

    if(questions[0].Count > 0)
      ... // you have read records.
    

    但是,话虽如此,我将更改您的代码,为问题添加一个特定的类,并使用一个列表(问题)而不是列表数组 因此,例如,创建一个这样的类

    public class Question
    {
        public string ID;
        public string Difficulty;
        public string Question;
        public string RightAnswer;
        public string AnswerA;
        public string AnswerB;
        public string AnswerC;
        public string AnswerD;
    }
    

    并更改您的选择以返回一个列表(问题)

     List<Question> list = new List<Question>;
     ......
     while (dataReader.Read())
     {
          Question qst = new Question();
          qst.ID = dataReader["id"] + "";
          qst.Difficulty = dataReader["difficulty"] + "";
          qst.Question = dataReader["qustions"] + "";
          qst.RightAnswer = dataReader["c_answer"] + "";
          qst.AnswerA = dataReader["choiceA"] + "";
          qst.AnswerB = dataReader["choiceB"] + "";
          qst.AnswerC = dataReader["choiceC"] + "";
          qst.AnswerD = dataReader["choiceD"] + "";
          list.Add(qst);
     }
     return list;
    

    【讨论】:

    • 您好,感谢您的帮助。我做了一个按钮来帮助我进行这个测试。按下按钮时,它将运行 select 方法。但是我在 MySqlDataReader dataReader = cmd.ExecuteReader(); 处遇到错误说连接必须有效且打开
    • 那么来自this.OpenConnection 的代码没有按预期工作。可能您应该显示该方法的代码以了解发生了什么。
    • 请在上面查看我的代码的编辑版本,现在包括 openConnection。
    • 你编辑显示connection.Open方法被注释掉了,所以当你尝试运行Select方法时连接被关闭,因此你得到了异常。
    • 哎呀,没看到:D。但现在它在 connection.Open() 上给了我“算术运算导致溢出”错误。真是让人头疼。我通过遵循连接数据库的教程之一获得了此代码。
    【解决方案2】:

    您可以通过为其编写单元测试来测试该方法是否有效。一个好的单元测试框架是Nunit。在调用它之前,您必须创建并打开与数据库的连接:

        //Open connection
        if (this.OpenConnection() == true)
        {
    

    正如其他人所说,您需要修复列表。

    【讨论】:

    • 我已经这样做了,我的 DBConn 类中有这个方法。但即便如此,当我从不同的类调用 select 方法时,它表示连接必须有效且打开。知道我哪里出错了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2021-11-05
    • 2017-04-04
    相关资源
    最近更新 更多