C# 如何使用可以在层模型中更改的参数,使用C从数据库中获取特定字符串

C# 如何使用可以在层模型中更改的参数,使用C从数据库中获取特定字符串,c#,mysql,database,C#,Mysql,Database,我需要为我的年终任务制作一份帮助台表格,我被卡住了 该任务要求我加载用户通过组合框选择的特定问题的解决方案。我的实现需要分为多个层,如业务持久化等 我为解决这个问题而编写的代码无法在这里解释原因。我已经做了一些尝试,并将其包括在下面 第一次尝试: 在我的第一次尝试中,我编写了以下代码以从数据库加载所选问题的解决方案: public List<HelpDesk> getOplossing() { List<HelpDesk> lijst = new List<

我需要为我的年终任务制作一份帮助台表格,我被卡住了

该任务要求我加载用户通过组合框选择的特定问题的解决方案。我的实现需要分为多个层,如业务持久化等

我为解决这个问题而编写的代码无法在这里解释原因。我已经做了一些尝试,并将其包括在下面

第一次尝试:

在我的第一次尝试中,我编写了以下代码以从数据库加载所选问题的解决方案:

public List<HelpDesk> getOplossing()
{
    List<HelpDesk> lijst = new List<HelpDesk>();
    MySqlConnection conn = new MySqlConnection(_connectionstring);
    MySqlCommand cmd = new MySqlCommand("SELECT Oplosing from tblhelpdesk where Probleem = @probleem" , conn);
    cmd.Parameters.Add(new MySqlParameter("@probleem",                     
    getProbleem().ToString()));

    conn.Open();
    MySqlDataReader datareader = cmd.ExecuteReader();

    while (datareader.Read())
    {
        HelpDesk hlpdsk = new HelpDesk(
           datareader["Oplosing"].ToString());
        lijst.Add(hlpdsk);

    }
    conn.Close();
    return lijst;
}
再次在控制器中:

public string getOplossing()
{
    return _persistcode.getOplossing();
}
我的整个帮助台课程:

班级帮助台是这样的:我提供了整个班级,所以你们可以了解所有的问题:/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GPDeBruykerSander_Domain.Business
{
    public class HelpDesk
    {
        private int _id;
        private Boolean _categorie; //Hardware= True en Software= False
        private DateTime _datumProbleem;
        private string _probleem;
        private DateTime _datumOplossing;
        private string _oplossing; 

        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }

        public override string ToString()
        {
            return Probleem;
        }

        public Boolean Categorie
        {
            get { return _categorie; }
            set { _categorie = value; }
        }

        public DateTime DatumProbleem
        {
            get { return _datumProbleem; }
            set { _datumProbleem = value; }
        }

        public string Probleem
        {
            get { return _probleem; }
            set { _probleem = value; }
        }

        public DateTime DatumOplossing
        {
            get { return _datumOplossing; }
            set { _datumOplossing = value; }
        }

        public string Oplossing
        {
            get { return _oplossing; }
            set { _oplossing = value; }
        }

        public HelpDesk (int id, Boolean categorie, DateTime datumProbleem, string probleem, DateTime datumOplossing, string oplossing)
        {
            _id = id;
            _categorie = categorie;
            _datumProbleem = datumProbleem;
            _probleem = probleem;
            _datumOplossing = datumOplossing;
            _oplossing = oplossing;
        }

        public HelpDesk(Boolean categorie, DateTime datumProbleem, string probleem, DateTime datumOplossing, string oplossing)
        {
            _categorie = categorie;
            _datumProbleem = datumProbleem;
            _probleem = probleem;
            _datumOplossing = datumOplossing;
            _oplossing = oplossing;
        }
        public HelpDesk(DateTime datumProbleem, Boolean categorie, string probleem)
        {
            _datumProbleem = datumProbleem;
            _categorie = categorie;
            _probleem = probleem;

        }
        public HelpDesk(DateTime datumOplossing, string oplossing)
        {
            _datumOplossing = datumOplossing;
            _oplossing = oplossing;       
        }

        public HelpDesk(string probleem)
        {
            _probleem = probleem;
        }
    }
}

我希望有人能帮我找到解决方案,因为我被卡住了:/

你第一次尝试时离解决问题更近了,所以我会帮你的。但是,由于您还没有提供任何关于代码无法工作的原因,比如应用程序抛出的错误等,我只能尝试一下在代码中看到的潜在问题

查看您的MySQL查询:从tblhelpdesk中选择Oplosing,其中Probleem=@Probleem,我想说您缺少@Probleem的引号。因此,此查询应如下所示:

public List<HelpDesk> getOplossing()
{
    return _persistcode.getOplossing();
}
SELECT Oplosing from tblhelpdesk where Probleem = '@probleem'
我亦会提出以下建议:

建议1:让getProbleem方法实际返回一个字符串,这样您就不必对其调用ToString。您尚未提供此方法的实现,因此我只能假设返回类型不是字符串。如果返回类型是字符串,那么ToString在这里是完全冗余的

建议2: 我还建议您将问题字符串作为参数传递给getOplossing,以便更好地封装数据库代码。例如:

public List<HelpDesk> getOplossing(string probleem)
{
    ...

    cmd.Parameters.Add(new MySqlParameter("@probleem", probleem));

    ...
}
您的控制器会这样称呼它:

public List<HelpDesk> getOplossing()
{
    string probleem = getProbleem().ToString();

    return _persistcode.getOplossing(probleem);
}
public List<HelpDesk> getOplossing()
{
    string probleem = getProbleem().ToString();

    return _persistcode.getOplossing(probleem);
}