代码之家  ›  专栏  ›  技术社区  ›  Siegfried.V

C-使项目MySQL和SQL Server兼容

  •  0
  • Siegfried.V  · 技术社区  · 6 年前

    我正在做一个我都想要的项目 mysql MSQL语言 兼容的。 一切正常,但我有一个关于代码重复的小问题:

    对于所有数据库查询,我都有一个单独的类,对于selects,我执行以下操作(例如,对于对象“profil”):

    我有一个参数“ismysql”,如果我想使用mysql,该参数设置为true;如果我想使用microsoft SQL Server,该参数设置为false。

    public Profil Select_profil(string query)
            {
                Profil profil = new Profil();
                if (this.OpenConnection() == true)
                {
                    if (this.isMySQL)
                    {
                        MySqlCommand cmd = new MySqlCommand(query.Replace("[myDataBase].", ""), connection);
                        using (MySqlDataReader dataReader = cmd.ExecuteReader())
                        {
                            while (dataReader.Read())
                            {
                                profil.ID = Int32.Parse(dataReader["ID"].ToString().Trim());
                                profil.Nom = dataReader["PROFIL"].ToString().Trim();
                                profil.Famille = dataReader["FAMILLE"].ToString().Trim();
                                profil.Largeur = double.Parse(dataReader["LARGEUR"].ToString().Trim());
                                profil.Hauteur = double.Parse(dataReader["LARGEUR_AILE"].ToString().Trim());
                                profil.EpAile = double.Parse(dataReader["EP_AILE"].ToString().Trim());
                                profil.EpAme = double.Parse(dataReader["EP_AME"].ToString().Trim());
                                profil.Radius1 = double.Parse(dataReader["R"].ToString().Trim());
                                profil.Radius2 = double.Parse(dataReader["R2"].ToString().Trim());
                                profil.PdsLin = double.Parse(dataReader["PDS_LINEAIRE"].ToString().Trim());
                                profil.PaintSurf = double.Parse(dataReader["PAINT_SURF"].ToString().Trim());
                                profil.P08 = double.Parse(dataReader["P08"].ToString().Trim());
                                profil.P09 = double.Parse(dataReader["P09"].ToString().Trim());
                                profil.P10 = double.Parse(dataReader["P10"].ToString().Trim());
                                profil.P11 = double.Parse(dataReader["P11"].ToString().Trim());
                            }
                        }
                    }
                    else
                    {
                        SqlCommand cmd = new SqlCommand(query, MSconnection);
                        using (SqlDataReader dataReader = cmd.ExecuteReader())
                        {
                            while (dataReader.Read())
                            {
                                profil.ID = Int32.Parse(dataReader["ID"].ToString().Trim());
                                profil.Nom = dataReader["PROFIL"].ToString().Trim();
                                profil.Famille = dataReader["FAMILLE"].ToString().Trim();
                                profil.Largeur = double.Parse(dataReader["LARGEUR"].ToString().Trim());
                                profil.Hauteur = double.Parse(dataReader["LARGEUR_AILE"].ToString().Trim());
                                profil.EpAile = double.Parse(dataReader["EP_AILE"].ToString().Trim());
                                profil.EpAme = double.Parse(dataReader["EP_AME"].ToString().Trim());
                                profil.Radius1 = double.Parse(dataReader["R"].ToString().Trim());
                                profil.Radius2 = double.Parse(dataReader["R2"].ToString().Trim());
                                profil.PdsLin = double.Parse(dataReader["PDS_LINEAIRE"].ToString().Trim());
                                profil.PaintSurf = double.Parse(dataReader["PAINT_SURF"].ToString().Trim());
                                profil.P08 = double.Parse(dataReader["P08"].ToString().Trim());
                                profil.P09 = double.Parse(dataReader["P09"].ToString().Trim());
                                profil.P10 = double.Parse(dataReader["P10"].ToString().Trim());
                                profil.P11 = double.Parse(dataReader["P11"].ToString().Trim());
                            }
                        }
                    }
                    this.CloseConnection();
                }
                return profil;
            }
    

    对于MySQL和SQL Server,代码是相同的(除了 [我的数据库]。 ,如果是mysql,我会替换它),但我需要重复两次,因为在一个情况下,我使用对象mysqlcommand和mysqldatareader,在第二个情况下,我需要使用sqlcommand和sqldatareader。 不方便的是,当我在数据库中进行一些修改时,我需要全部更改两次(错误的来源)。 有没有一种方法可以将代码分组并放一次,而不使用函数?

    3 回复  |  直到 6 年前
        1
  •  1
  •   zacs    6 年前

    public IDataReader ExecuteReader(string query) 
        {
             IDataReader dataReader = null; 
           if (this.isMySQL) 
          {
             MySqlCommand cmd = new MySqlCommand(query.Replace("[myDataBase].", ""), 
             connection); 
             dataReader = cmd.ExecuteReader(); 
          } 
          else 
          { 
            SqlCommand cmd = new SqlCommand(query, connection); 
            dataReader = cmd.ExecuteReader(); 
          }
            return dataReader; 
      }
    
        2
  •  0
  •   PepitoSh    6 年前

        3
  •  0
  •   Siegfried.V    6 年前

    public List<Profil> Select_profil(string query)
            {
                List<Profil> list = new List<Profil>();
                if (this.OpenConnection() == true)
                {
                    IDataReader dataReader = ExecuteReader(query);
                    while (dataReader.Read())
                    {
                        ...
                        ...
                    }
                    this.CloseConnection();
                }
                return list;
            }
    

    public IDataReader ExecuteReader(string query)
            {
                IDataReader dataReader = null;
                if (this.isMySQL)
                {
                    MySqlCommand cmd = new MySqlCommand(query.Replace("[v-steel].", ""), connection);
                    dataReader = cmd.ExecuteReader();
                }
                else
                {
                    SqlCommand cmd = new SqlCommand(query, MSconnection); 
                    dataReader = cmd.ExecuteReader();
                }
                return dataReader;
            }
    

    private MySqlConnection connection;
    private SqlConnection MSconnection;