簡體   English   中英

.NET 3.5中數據訪問層的定義

[英]Definition of a Data Access Layer in .NET 3.5

我有以下代碼,是由我的Web項目中的其他人編寫的:

    StringBuilder sql = new StringBuilder("");

    // Define sql
    sql.Append("SELECT title ");
    sql.Append("FROM MyTable ");
    sql.Append(string.Format("WHERE id = {0} AND Var = '{1}'", myId, myVar));

    DataTable dtGroups = SqlHelper.GetDataTable(sql.ToString());

    if (dtGroups.Rows.Count > 0)
    {

        foreach (DataRow dr in dtGroups.Rows)
        {
            return dr["title"].ToString();
        }
    }

    return "";

然后我有一個名為SqlHelper.cs的輔助類,它有這個方法:

  public static DataTable GetDataTable(string sql) {
        return GetDataTable(sql, MyConnectionString);
    }

SqlHelper類是否構成DAL? 做事的正確方法是什么? 我應該創建一個DAL類,您將發送sql並返回標題(如SqlHelper.GetTitle(sql))?

那段代碼很糟糕 SQL注入; DataTable無緣無故; StringBuilder無緣無故。 這里簡單地完成,使用“dapper”(在NuGet上免費提供):

using(var conn = GetSomeConnection()) { // <== todo
    return conn.Query<string>(
        "select title from MyTable where id=@id and Var=@var",
        new { id = myId, var = myVar }).FirstOrDefault() ?? "";
}

這是:

  • 注射安全(完全參數化)
  • 直接(沒有像DataTable這樣的不必要的層)
  • 優化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM