2014-10-12 97 views
0

我在c#中有一个关于医院系统的项目,其中包含30个子窗体。如何创建数据库表类

我创建了包含超过30个表的数据库。

我创建的数据访问是这样的:

namespace emamTree 
{ 
    public class DBAccess 
    { 
     public static string connectionString = ConfigurationManager.ConnectionStrings["TreeFinal"].ConnectionString ; 

     public SqlCommand Intialize(string query, params SqlParameter[] prmArray) 
     { 
       SqlConnection cn = new SqlConnection(connectionString); 

       SqlCommand cmd = new SqlCommand(query, cn); 

       if (!query.Contains(" ")) 
        cmd.CommandType = System.Data.CommandType.StoredProcedure; 

       if (prmArray.Length > 0) 
        cmd.Parameters.AddRange(prmArray); 

       cn.Open(); 

       return cmd; 
     } 

     public int ExcuteNonQuery(string query, params SqlParameter[] prmArray) 
     { 
      try 
      { 
       SqlCommand cmd = Intialize(query, prmArray); 

       int affectedRows = cmd.ExecuteNonQuery(); 

       cmd.Connection.Close(); 

       return affectedRows; 
      } 
      catch (SqlException ex) 
      { 
       return ex.Number; 
      } 
     } 

     public object ExcuteScalar(string query, params SqlParameter[] prmArray) 
     { 
      try 
      { 
       SqlCommand cmd = Intialize(query, prmArray); 

       object value = cmd.ExecuteScalar(); 

       cmd.Connection.Close(); 

       return value; 
      } 
      catch (SqlException ex) 
      { 
       return ex.Number; 
      } 
     } 

     public SqlDataReader ExcuteReader(string query, params SqlParameter[] prmArray) 
     { 
       SqlCommand cmd = Intialize(query, prmArray); 

       SqlDataReader sqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

       return sqlDataReader; 
     } 

     public DataTable ExcuteDataTable(string query, params SqlParameter[] prmArray) 
     { 
       SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(query, connectionString); 

       if (!query.Contains(" ")) 
        sqlDataAdapter.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure; 

       if (prmArray.Length > 0) 
        sqlDataAdapter.SelectCommand.Parameters.AddRange(prmArray); 

       DataTable dt = new DataTable(); 
       sqlDataAdapter.Fill(dt); 

       return dt; 
     } 

     public DataSet ExcuteDataSet(string query, params SqlParameter[] prmArray) 
     { 
      SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(query, connectionString); 

      if (!query.Contains(" ")) 
       sqlDataAdapter.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure; 

      if (prmArray.Length > 0) 
       sqlDataAdapter.SelectCommand.Parameters.AddRange(prmArray); 

      DataSet ds = new DataSet(); 
      sqlDataAdapter.Fill(ds); 

      return ds; 
     } 
    } 
} 

在形式的患者(表患者)创建保存方法和工作正常:

public void Save() 
{ 

    DBAccess db = new DBAccess(); 
    db.ExcuteNonQuery("insert into Patients (FileNum,PatientTypeID,EngName,NationalityID,RelegionID) values (@FileNum,@PatientTypeID,@EngName,@NationalityID,@RelegionID)", 
     new SqlParameter("@FileNum", txtFileNum.Text), 
     new SqlParameter("@PatientTypeID", txtPatientTypeID.Text), 
     new SqlParameter("@EngName", txtEngName.Text), 
     new SqlParameter("@NationalityID", txtNationalityID.Text), 
     new SqlParameter("@RelegionID", txtRelegionID.Text) 
         ); 

} 

我的问题是如何让班级每个表在数据库中?

+4

您是否考虑过使用像20年前发明的技术叫做对象关系映射?它甚至在名为“实体框架”的.NET框架中。 – TomTom 2014-10-12 07:09:55

回答

1

使用现有的解决方案,如EntityFramework。它提供了所有你需要的功能,它会让你的生活比自己写下所有的东西容易得多(我知道,我已经做到了)。

1

创建数据访问层是任何应用程序中非常关键的部分。它必须是一个单独的库,以便您可以在今天和未来的任何项目中使用它。说,明天你希望你的Windows应用程序被转换成一个Web应用程序!您可以添加DAL库并开始使用它。

话虽如此,建立自己的DAL是时间消耗和其重新发明车轮。所以你需要探索可能适合你的需求的可用选项。开箱即用,您有一个名为EntityFramework的ORM。它的使用非常简单,但性能明智,与手写sql相比较慢。还有另一个流行的ORM叫做NHibernate。它的原始配对Hibernate在java社区中是非常庞大的,但它的学习曲线非常陡峭。

但我喜欢使用PetaPoco。它给予了两全其美。 ORM + sql。还有其他类似微型ORM,如Dapper,Massive等。您需要尝试其中的每一种,并选择适合您手头应用的那种。

即使在选择适合您账单的框架之后,您需要创建抽象以确保您可以稍后在需要时更改框架。创建一个合适的DAL是一项艰巨的任务,并且作为一名开发人员花了很大一部分时间来完成正确的事情。你可以通过你自己探索和发现它。祝你好运。