2013-03-20 53 views
0

我有很多具有相同結構的類,我想在它們中實現一個接口。那麼,如果有人有解決方案嗎?實現一個接口到我的數據訪問層

public static class ClientDAL 
     { 
     private static string connString = ConfigurationManager.ConnectionStrings["default"].ToString(); 

    public static ClientEntity NewClient(ClientEntity client) 
    { 
     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = connString; 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "InsertNewClient"; 
      cmd.Connection = conn; 

      cmd.Parameters.AddWithValue("@ClientID", client.ClientID); 
      cmd.Parameters.AddWithValue("@ClientName", client.ClientName); 
      cmd.Parameters.AddWithValue("@ClientNif", client.ClientNIF); 
      cmd.Parameters.AddWithValue("@ClientAddress", client.ClientAddress); 
      cmd.Parameters.AddWithValue("@ClientCountry", client.ClientCountry); 
      cmd.Parameters.AddWithValue("@ClientProvincy", client.ClientProvincy); 
      cmd.Parameters.AddWithValue("@ClientCity", client.ClientCity); 
      cmd.Parameters.AddWithValue("@ClientPhone", client.ClientPhone); 
      cmd.Parameters.AddWithValue("@ClientMobile", client.ClientMobile); 
      cmd.Parameters.AddWithValue("@ClientFax", client.ClientFax); 
      cmd.Parameters.AddWithValue("@ClientEmail", client.ClientEmail); 
      cmd.Parameters.AddWithValue("@ClientInfo", client.ClientInfo); 
      cmd.ExecuteNonQuery(); 
     } 
     return client; 
    } 
    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="clientID"></param> 
    /// <returns></returns> 
    public static ClientEntity GetClientByID(Int64 clientID) 
    { 
     ClientEntity client=null; 
     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = connString; 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "SelectClient"; 
      cmd.Connection = conn; 

      cmd.Parameters.AddWithValue("@ClientID", clientID); 

      SqlDataReader reader = cmd.ExecuteReader(); 

      while (reader.Read()) 
      { 
       client=LoadClient(reader); 
      } 
     } 
     return client; 
    } 
    /// <summary> 
    /// 
    /// </summary> 
    /// <param name="ClientID"></param> 
    /// <returns></returns> 
    public static bool Exists(Int64 ClientID) 
    { 
     int numberOfRecord = 0; 
     using (SqlConnection conn=new SqlConnection()) 
     { 
      conn.ConnectionString = connString; 
      conn.Open(); 

      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "SelectValidClient"; 
      cmd.Connection = conn; 
      cmd.Parameters.AddWithValue("@ClientID", ClientID); 
      numberOfRecord = Convert.ToInt32(cmd.ExecuteScalar()); 

     } 
     return numberOfRecord > 0; 
    } 

    public static List<ClientEntity> GetAllClients() 
    { 
     List<ClientEntity> lista = new List<ClientEntity>(); 
     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = connString; 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "SelectAllClient"; 
      cmd.Connection = conn; 

      SqlDataReader reader = cmd.ExecuteReader(); 

      while (reader.Read()) 
      { 
       lista.Add(LoadClient(reader)); 
      } 
     } 
     return lista; 
    } 
    public static ClientEntity UpdateClient(ClientEntity client) 
    { 
     using (SqlConnection conn = new SqlConnection()) 
     { 
      conn.ConnectionString = connString; 
      conn.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "UpdateClient"; 
      cmd.Connection = conn; 

      cmd.Parameters.AddWithValue("@ClientID", client.ClientID); 
      cmd.Parameters.AddWithValue("@ClientName", client.ClientName); 
      cmd.Parameters.AddWithValue("@ClientNif", client.ClientNIF); 
      cmd.Parameters.AddWithValue("@ClientAddress", client.ClientAddress); 
      cmd.Parameters.AddWithValue("@ClientCountry", client.ClientCountry); 
      cmd.Parameters.AddWithValue("@ClientProvincy", client.ClientProvincy); 
      cmd.Parameters.AddWithValue("@ClientCity", client.ClientCity); 
      cmd.Parameters.AddWithValue("@ClientPhone", client.ClientPhone); 
      cmd.Parameters.AddWithValue("@ClientMobile", client.ClientMobile); 
      cmd.Parameters.AddWithValue("@ClientFax", client.ClientFax); 
      cmd.Parameters.AddWithValue("@ClientEmail", client.ClientEmail); 
      cmd.Parameters.AddWithValue("@ClientInfo", client.ClientInfo); 
      cmd.ExecuteNonQuery(); 
     } 
     return client; 
    } 

    private static ClientEntity LoadClient(IDataReader reader) 
    { 
     ClientEntity list= new ClientEntity(); 

     list.ClientID =Convert.ToInt64(reader["ClientID"]); 
     list.ClientName = Convert.ToString(reader["ClientName"]); 
     list.ClientNIF = Convert.ToInt64(reader["ClientNif"]); 
     list.ClientAddress = reader["ClientAddress"]==null?string.Empty:Convert.ToString(reader["ClientAddress"]); 
     list.ClientCountry = reader["ClientCountry"]==null?string.Empty:Convert.ToString(reader["ClientCountry"]); 
     list.ClientProvincy = reader["ClientProvincy"]==null?string.Empty:Convert.ToString(reader["ClientProvincy"]); 
     list.ClientCity = reader["ClientCity"] == null ? string.Empty : Convert.ToString(reader["ClientCity"]); 
     list.ClientPhone = reader["ClientPhone"] == null ? string.Empty : Convert.ToString(reader["ClientPhone"]); 
     list.ClientMobile = reader["ClientMobile"] == null ? String.Empty : Convert.ToString(reader["ClientMobile"]); 
     list.ClientFax = reader["ClientFax"] == null ? String.Empty : Convert.ToString(reader["ClientFax"]); 
     list.ClientEmail = reader["ClientEmail"] == null ? string.Empty : Convert.ToString(reader["ClientEmail"]); 
     list.ClientInfo = reader["ClientInfo"] == null ? string.Empty : Convert.ToString(reader["ClientInfo"]); 

     return list; 
} 

}

+0

我建議使用像NHibernate或EntityFramework這樣的ORM來爲你做這件事 - 它不太容易出錯,並且提供了有用的功能(並且可以節省大量的時間!) – Dai 2013-03-20 23:48:25

+0

Hi @Dai你可以給我一個示例代碼嗎?如何做到這一點,即使用NHibernate的建議? – noslin005 2013-03-21 13:55:10

回答

0

不能定義爲靜態類接口。開始重構你的代碼,並且一旦完成,用與所有類中重複的相同方法編寫一個接口。類似於

public interface IClientDAL 
{ 
    string ConnString { get; set; } 

    ClientEntity NewClient(ClientEntity client); 
    //... 
} 

最後在需要它的所有類中實現接口。

+0

謝謝,我想知道是否可以爲我的班級創建單個界面。例如,a有一個名爲Tax的Class,它具有Save,GetById,GetAll,Update,Delete,GetLastID方法。所有關閉此方法都存在於我的類上,但它們的retun值不同。所以,我的問題是:**對於每個類,我必須創建一個接口,或者我應該爲所有類創建一個通用接口?** – noslin005 2013-03-21 13:18:52

+0

正如答案中所述:是的,您可以創建一個通用接口所有課程。 – 2013-03-21 13:35:50

+0

看一看,稅收類有一個方法NewTax: '公共靜態類TaxDal { TaxEntity NewTax(TaxEntity稅){// ... } }' 如果我實現你的建議THA的界面, NewTax和newclient的返回值是不同的! – noslin005 2013-03-21 13:56:07