我需要为我的年底任务做一个helpdesk表格,我被卡住了。
任务要求我加载用户通过combobox
选择的特定问题的解决方案。我的实施需要分为像业务这样的层,等等。
我编写的解决此问题的代码不起作用(解释为什么在这里)。我已经尝试了一些尝试,并在下面包括了它们。
首次尝试:
对于我的第一次尝试,我编写了以下代码,以加载数据库中所选问题的解决方案:
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 List<HelpDesk> getOplossing()
{
return _persistcode.getOplossing();
}
尝试2:
这是我为第二次尝试而写的。
public string getOplossing()
{
MySqlConnection conn = new MySqlConnection(_connectionstring);
MySqlCommand cmd = new MySqlCommand("SELECT Oplosing from tblhelpdesk", conn);
conn.Open();
string oplossing;
oplossing = cmd.ExecuteScalar().ToString();
conn.Close();
return oplossing;
}
在控制器中再次:
public string getOplossing()
{
return _persistcode.getOplossing();
}
我的整个HelpDesk类:
和类HelpDesk
看起来像这样:(我提供了整个班级,所以你们可以在所有问题上都有gander:/)
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查询:SELECT Oplosing from tblhelpdesk where Probleem = @probleem
,我想您缺少@probleem
周围的引号。因此,此查询应该看起来像这样:
SELECT Oplosing from tblhelpdesk where Probleem = '@probleem'
我也会提出以下建议:
建议1 :使getProbleem()
方法实际返回string
,因此您不必在其上调用ToString()
。您尚未提供此方法的实现,因此我只能假设返回类型不是string
。如果返回类型是string
,则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);
}