2013-03-08 40 views
5

Tôi đang làm việc trên Microsoft Visual Studio DAL trong đó tôi đang thực hiện phương pháp truyền thống để tìm nạp/cập nhật dữ liệu để hiển thị các đánh giá về các mục được liệt kê trên trang web bằng cách truy xuất dữ liệu từ bảng ItemDetails cơ sở dữ liệu trang web, để tạo tệp ItemDetails.aspx. Tôi đã thêm DropDownList Control để hiển thị tất cả các mục trong danh mục của nó. Khi chọn danh mục từ danh sách thả xuống, nó hiển thị tất cả các mục trong danh mục đó, với siêu liên kết được đính kèm "Show Details" để nó hiển thị chi tiết trong chế độ xem lưới. i am newbie tôi không có ý tưởng để tạo ra DAL cho trang web asp.net. Cần hướng dẫn dễ dàng để tạo DAL cho trang web asp.net. Trợ giúp sẽ được đánh giá cao. Các cách khác để tạo DAL thay vì SQLadapter là gì.Tạo DAL cho trang web ASP.NET

+1

Cá nhân tôi sử dụng Entity Framework Code-First (tôi xác định các bảng của tôi như là lớp học với strongly- tham chiếu đã nhập). Nó tạo Db động và sau đó tôi sử dụng mẫu kho lưu trữ để truy vấn ví dụ ... 'User user = UserRepo.Single (x => x.Username ==" Bob ");' Throw trong mẫu 'UnitOfWork' để lưu các thay đổi và đó là một ORM thực sự thanh lịch và tương đối hiệu quả. Lưu ý rằng nhược điểm lớn nhất là cập nhật hàng loạt có thể chậm - khi bạn cập nhật hàng trăm nghìn bản ghi cùng một lúc, bạn sẽ dễ dàng quay trở lại bộ điều hợp Sql hơn. – Basic

+0

tôi muốn sử dụng nó cho trang web có gần 15-17 trang và 60 bảng cơ sở dữ liệu. –

+1

Đó không thực sự là một vấn đề. Tôi đã sử dụng nó trên một trang web với ~ 100 bảng và hàng trăm trang. Lý do duy nhất cập nhật hàng loạt là một vấn đề là chúng không được gửi tới SQL theo lô - ví dụ: nó cập nhật một tập B = C WHERE Id = 1', 'UPDATE Một tập hợp B = C WHERE Id = 2', v.v. thay vì 'UPDATE Một tập hợp B = C WHERE Id IN (1,2)' nhưng trừ khi bạn đang thực hiện cùng một cập nhật cho hàng ngàn hàng cùng một lúc, nó không phải là một vấn đề – Basic

Trả lời

1

Vì vậy, ví dụ ở đây là một DAL tôi đã sử dụng trước đây để gọi SP.

Nó cho phép bạn thực hiện các thủ tục lưu trữ và trả lại dữ liệu, datatables, phản hồi thành công, vv

Thực sự nó phụ thuộc vào cách bạn định truy cập dữ liệu, bạn sẽ có văn bản Thủ tục lưu trữ hoặc bạn sẽ có thắc mắc trong mã của bạn. Bạn cũng có tùy chọn sử dụng Entity Framework/LINQ.

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Data; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Configuration; 

public class _DataInteraction 
{ 

    #region "Stored Procedures" 

    public static DataTable stdReturnDataTableQuery(string procedureName, string db) 
    { 
     DataTable myDataTable; 

     SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[db].ConnectionString); 
     SqlCommand cmd = new SqlCommand(); 
     SqlDataAdapter myDataAdapter = new SqlDataAdapter(); 

     cmd.CommandText = procedureName; 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = myConnection; 


     //----------------------------------------------------------------------- 
     // make our datatable to return 
     //----------------------------------------------------------------------- 
     myDataTable = new DataTable(); 

     //----------------------------------------------------------------------- 
     // fill the datatable with the stored procedure results 
     //----------------------------------------------------------------------- 
     try 
     { 
      myConnection.Open(); 
      myDataAdapter.SelectCommand = cmd; 
      myDataAdapter.Fill(myDataTable); 
     } 
     catch (Exception ex) 
     { 
      //flag as error happened 
      throw ex; 
     } 
     finally 
     { 
      myConnection.Close(); 
      if ((myDataAdapter != null)) 
       myDataAdapter.Dispose(); 
      if ((cmd != null)) 
       cmd.Dispose(); 
     } 

     return myDataTable; 
    } 


    // Return a datatable from the database 
    public static DataTable stdReturnDataTable(string procedureName, List<SqlParameter> myParameters, string db) 
    { 
     SqlConnection myConnection = default(SqlConnection); 
     SqlCommand myCommand = default(SqlCommand); 
     SqlDataAdapter myDataAdapter = default(SqlDataAdapter); 
     DataTable myDataTable = default(DataTable); 
     string connString = null; 

     // ----------------------------------------------------------------------- 
     // create instance of connection 
     // ----------------------------------------------------------------------- 
     connString = ConfigurationManager.ConnectionStrings[db].ConnectionString; 
     myConnection = new SqlConnection(); 
     myConnection.ConnectionString = connString; 

     //----------------------------------------------------------------------- 
     // create instance of command and dataadapter 
     //----------------------------------------------------------------------- 
     myCommand = new SqlCommand(procedureName, myConnection); 
     myDataAdapter = new SqlDataAdapter(myCommand); 

     //----------------------------------------------------------------------- 
     // say its a stored procedure command 
     //----------------------------------------------------------------------- 
     myCommand.CommandType = CommandType.StoredProcedure; 

     //----------------------------------------------------------------------- 
     // add any parameters? 
     //----------------------------------------------------------------------- 
     if ((myParameters != null)) 
     { 
      foreach (SqlParameter myParm in myParameters) 
      { 
       // add the parameter to the command 
       myCommand.Parameters.Add(myParm); 
      } 
     } 

     //----------------------------------------------------------------------- 
     // make our datatable to return 
     //----------------------------------------------------------------------- 
     myDataTable = new DataTable(); 

     //----------------------------------------------------------------------- 
     // fill the datatable with the stored procedure results 
     //----------------------------------------------------------------------- 
     try 
     { 
      myConnection.Open(); 
      myDataAdapter.Fill(myDataTable); 
     } 
     catch (Exception ex) 
     { 
      //flag as error happened 
      throw ex; 
     } 
     finally 
     { 
      myConnection.Close(); 
      if ((myDataAdapter != null)) 
       myDataAdapter.Dispose(); 
      if ((myCommand != null)) 
       myCommand.Dispose(); 
     } 

     return myDataTable; 
    } 

    // Return a dataset from the database 
    public static DataSet stdReturnDataset(string procedureName, List<SqlParameter> myParameters, string db) 
    { 
     SqlConnection myConnection = default(SqlConnection); 
     SqlCommand myCommand = default(SqlCommand); 
     SqlDataAdapter myDataAdapter = default(SqlDataAdapter); 
     DataSet ds = new DataSet(); 
     string connString = null; 

     //----------------------------------------------------------------------- 
     // create instance of connection 
     //----------------------------------------------------------------------- 
     connString = ConfigurationManager.ConnectionStrings[db].ConnectionString; 
     myConnection = new SqlConnection(); 
     myConnection.ConnectionString = connString; 

     //----------------------------------------------------------------------- 
     // create instance of command and dataadapter 
     //----------------------------------------------------------------------- 
     myCommand = new SqlCommand(procedureName, myConnection); 
     myDataAdapter = new SqlDataAdapter(myCommand); 

     //----------------------------------------------------------------------- 
     // say its a stored procedure command 
     //----------------------------------------------------------------------- 
     myCommand.CommandType = CommandType.StoredProcedure; 

     //----------------------------------------------------------------------- 
     // add any parameters? 
     //----------------------------------------------------------------------- 
     if ((myParameters != null)) 
     { 
      foreach (SqlParameter myParm in myParameters) 
      { 
       // add the parameter to the command 
       myCommand.Parameters.Add(myParm); 
      } 
     } 

     //----------------------------------------------------------------------- 
     // fill the datatable with the stored procedure results 
     //----------------------------------------------------------------------- 
     try 
     { 
      myConnection.Open(); 
      myDataAdapter.Fill(ds); 
     } 
     catch (Exception ex) 
     { 
      //flag as error happened 
      throw ex; 
     } 
     finally 
     { 
      myConnection.Close(); 
      if ((myDataAdapter != null)) 
       myDataAdapter.Dispose(); 
      if ((myCommand != null)) 
       myCommand.Dispose(); 
     } 

     return ds; 
    } 

    // Return success from a query from the database 
    public static bool db_NonQuerySuccessResponse(string strCommandText, List<SqlParameter> myParameters, string db) 
    { 
     SqlConnection SQLConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[db].ConnectionString); 
     SqlCommand SQLCommand = new SqlCommand(); 
     DataSet ds = new DataSet(); 
     string Value = ""; 
     bool success = false; 

     try 
     { 
      SQLCommand.CommandText = strCommandText; 
      SQLCommand.CommandType = CommandType.StoredProcedure; 
      SQLCommand.Parameters.Clear(); 

      if ((myParameters != null)) 
      { 
       foreach (SqlParameter myParm in myParameters) 
       { 
        // add the parameter to the command 
        SQLCommand.Parameters.Add(myParm); 
       } 
      } 

      SQLCommand.Connection = SQLConnection; 
      SQLConnection.Open(); 
      SQLCommand.ExecuteNonQuery(); 
      SQLConnection.Close(); 

      success = true; 

     } 
     catch (Exception ex) 
     { 
      success = false; 
      return success; 
     } 

     return success; 

    } 

    // General non query, no results no success 
    public static bool db_NonQuery(string strCommandText, List<SqlParameter> myParameters, string db) 
    { 


     SqlConnection SQLConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[db].ConnectionString); 
     SqlCommand SQLCommand = new SqlCommand(); 
     DataSet ds = new DataSet(); 

     try 
     { 
      SQLCommand.CommandText = strCommandText; 
      SQLCommand.CommandType = CommandType.StoredProcedure; 
      SQLCommand.Parameters.Clear(); 

      if ((myParameters != null)) 
      { 
       foreach (SqlParameter myParm in myParameters) 
       { 
        // add the parameter to the command 
        SQLCommand.Parameters.Add(myParm); 
       } 
      } 

      SQLCommand.Connection = SQLConnection; 
      SQLConnection.Open(); 
      SQLCommand.ExecuteNonQuery(); 
      SQLConnection.Close(); 

     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 

    } 

    //// Execute scalar on db 
    //public static string db_Scalar(string strCommandText, ref List<SqlParameter> myParameters, string db) 
    //{ 

    // SqlConnection SQLConnection = new SqlConnection(ConfigurationManager.ConnectionStrings[db].ConnectionString); 
    // SqlCommand SQLCommand = new SqlCommand(); 
    // string Value = ""; 

    // SQLCommand.CommandText = strCommandText; 
    // SQLCommand.CommandType = CommandType.StoredProcedure; 
    // SQLCommand.Parameters.Clear(); 


    // if ((myParameters != null)) 
    // { 
    //  foreach (SqlParameter myParm in myParameters) 
    //  { 
    //   // add the parameter to the command 
    //   SQLCommand.Parameters.Add(myParm); 
    //  } 
    // } 

    // SQLCommand.Connection = SQLConnection; 
    // SQLConnection.Open(); 
    // Value = SQLCommand.ExecuteScalar; 
    // SQLConnection.Close(); 
    // return Value; 
    //} 

    #endregion 
} 
0

Dưới đây là 1 mẫu để tham khảo ............

 public List<T> GetRequests(string strNo) 
    { 
     List<T> objlstMapping = null; 
     Mapping objMapping = null; 
     try 
     { 
      Database objDbInstance = CreateSQLDatabase(DbConnection.MF); 

      using (DbCommand objDbCommand = objDbInstance.GetStoredProcCommand(Constants.SP_QUESTS)) 
      { 
       DALBase.AddDbParam(objDbInstance, objDbCommand, "@No", DbType.AnsiString, ParameterDirection.Input, strFolioNo); 

       objDbCommand.Connection = objDbInstance.CreateConnection(); 
       objDbCommand.Connection.Open(); 
       using (DbDataReader dr = objDbCommand.ExecuteReader(CommandBehavior.CloseConnection)) 
       { 
        objMapping = new List<T>(); 
        if (dr.HasRows) 
        { 
         while (dr.Read()) 
         { 
          objMapping = new BrokerFolioMapping(); 
          objMapping .Brok_Code = SProposedValue(dr, "Code"); 
          objMapping .Active = SProposedValue(dr, "Status"); 
          objMapping .AccStmt_Active = SProposedValue(dr, "PortfolioStatus"); 

          objlstFolioMapping.Add(objMapping); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
         } 
     return objlstFolioMapping; 
    }