【问题标题】:How to short a data filling function?如何缩短数据填充功能?
【发布时间】:2013-11-13 11:22:48
【问题描述】:

我在这里有一些 C# 示例,我实际上想知道如何优化它们。我想将代码示例减少到最低限度。有没有一种实用的方法来重构 Tour 类中的 GetDetails 或者我应该在 CombiTour 类中重构它?当然,我该如何重构它。

public class Tour
{
    public string zielID;
    public string ort;
    public string strasse;
    public string nummer;
    public string plz;
    public string land;
    public string name;
    public string fahrtNummer;

    public Tour(string zielID)
    {
        this.zielID = zielID;
    }
}

public class CombiTour
{
    public List<Tour> touren;

    public CombiTour()
    {
        this.touren = new List<Tour>();
    }

    public void GetDetails()
    {
        for (int i = 0; i < touren.Count; i++)
        {
            DataSet dsDetails = Tools.oGenericDs("SELECT Strasse, Nummer, PLZ, Ort, Land, Fahrtnummer FROM Ziele WHERE ZielID = " + this.touren[i].ZielID);
            this.touren[i].Strasse = dsDetails.Tables[0].Rows[0]["Strasse"].ToString();
            this.touren[i].Nummer = dsDetails.Tables[0].Rows[0]["Nummer"].ToString();
            this.touren[i].PLZ = dsDetails.Tables[0].Rows[0]["PLZ"].ToString();
            this.touren[i].Ort = dsDetails.Tables[0].Rows[0]["Ort"].ToString();
            this.touren[i].Land = dsDetails.Tables[0].Rows[0]["Land"].ToString();
            this.touren[i].Fahrtnummer = dsDetails.Tables[0].Rows[0]["Fahrtnummer"].ToString();

            dsDetails = Tools.oGenericDs("SELECT Name FROM Kunden WHERE ZielID = " + this.touren[i].ZielID);
            this.touren[i].Name = dsDetails.Tables[0].Rows[0]["Name"].ToString();
        }
    }
}

【问题讨论】:

  • 不用其他工具也可以(见答案)。你不应该连接你的查询,因为这很容易受到 SQL 注入的攻击。
  • 我还能如何将声明放在一起?
  • 为此使用参数

标签: c# optimization coding-style dataset conventions


【解决方案1】:

您可以使用 ORM(像 ORMLite 这样的轻型 ORM,或像 Entity Framework 这样的重量级 ORM)并让您完成与 POCO 之间的数据转换工作。

从字面上看,我使用 OrmLite 从数据库中获取数据的代码是:

var myProducts = connection.Query<Product>("SELECT * FROM Product");

然后我拿回了一系列产品。您甚至不需要手写 SQL(尽管在更复杂的情况下,您可能需要)。

EF 还大量使用 LinqToSQL,这意味着您很少(如果有的话)为手写 SQL 而烦恼,并且总是使用一流的 POCO 和 LINQ 来完成所有转换。

【讨论】:

  • 我想在没有第三方应用程序的情况下解决问题,可能是通过 linq?不过我在 C# 方面不是很有经验。
  • 它们是框架,而不是 3rd 方应用程序,并且 ORM 越来越流行,而不是像所示的那样编写所有代码。
  • 我也想了解这些框架是如何做到这一点的。对我来说,了解某事如何变得更好比如何知道如何做某事更重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多