根据数据库表结构来整合插入、删除、更新语句

根据表结构进行插入修改删除语句的整合:
开发语言:C#
开发工具:VS2010
数据库:ORACLE

   /// <summary>
        /// 1.获取表结构
        /// </summary>
        /// <param name="strTableNM">需要获取表结构的表名</param>
        /// <returns></returns>
        public DataTable GetJHDRTempStruct(string strTableNM)
        {
            StringBuilder sbTemp = new StringBuilder();
            if (数据库类型== "ORACLE")
            {
                sbTemp.Append("select distinct t.TABLE_NAME,t.COLUMN_NAME,t.DATA_TYPE,");
                sbTemp.Append(" case  when t.COLUMN_NAME in ");
                sbTemp.Append(" (select cu.column_name from user_cons_columns cu, user_constraints au ");
                sbTemp.Append("  where cu.constraint_name = au.constraint_name ");
                sbTemp.Append(" and au.constraint_type = 'P' and au.table_name = '" + strTableNM + "') ");

                sbTemp.Append("  then'P' else 'C' end as contentType ");
                sbTemp.Append("  from user_tab_columns t  where table_name = '" + strTableNM + "' ");
            }
            DataTable dt =获取表数据;
            return dt;

        }
获取表结构
  /// <summary>
        ///2.根据主键获取中间表查询语句
        /// </summary>
        /// <param name="dt">中间表结构</param>
        /// <param name="dr">数据</param>
        /// <param name="strTableName">表名</param>
        /// <returns>SQL语句</returns>
        public string JHDRTempGetSelect(DataTable dt, DataRow dr, string strTableName)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("select 1 from ").Append(strTableName).Append(" WHERE ");
            DataRow[] drPK = dt.Select("CONTENTTYPE='P'");//根据主键查询
            if (drPK.Length > 0)
            {
                for (int i = 0; i < drPK.Length; i++)
                {
                    string ColName = drPK[i]["COLUMN_NAME"].ToString().Trim();
                    sql.Append(ColName.ToUpper()).Append(" = '").Append(dr[ColName]).Append("' and ");
                }
            }

            sql.Remove(sql.Length - 4, 4);
            return sql.ToString();

        }
根据主键获取中间表查询语句
 /// <summary>
        ///  3.拼接插入的SQL语句
        /// </summary>
        /// <param name="dt">中间表结构</param>
        /// <param name="dr">数据</param>
        /// <returns>SQL语句</returns>
        public string JHDRTempGetInsert(DataTable dt, DataRow dr, string strTableName)
        {
            StringBuilder SQl = new StringBuilder();
            try
            {
                StringBuilder name = new StringBuilder();
                StringBuilder value = new StringBuilder();
             
                int j = 0;
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    j++;
                    string ColName = dt.Rows[i]["COLUMN_NAME"].ToString().Trim();//列名
                    string ColType = dt.Rows[i]["DATA_TYPE"].ToString().Trim();//该列的数据类型

                    name.Append(ColName.ToUpper()).Append(",");

                    //根据数据类型来拼接SQL语句
                    if (ColType.ToString().ToUpper().Contains("VARCHAR2") ||
                        ColType.ToString().ToUpper().Contains("CHAR"))
                    {
                        if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                        {
                            value.Append("null,");
                        }
                        else
                        {
                            value.Append("'" + dr[ColName].ToString().Trim() + "'").Append(",");
                        }
                    }
                    else if (ColType.ToString().ToUpper().Contains("NUMBER"))
                    {
                        if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                        {
                            value.Append("null,");
                        }
                        else
                        {
                            value.Append("" + dr[ColName].ToString().Trim() + "").Append(",");
                        }
                    }
                    else if (ColType.ToString().ToUpper().Contains("DATE"))
                    {
                        if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                        {
                            value.Append("null,");
                        }
                        else
                        {
                            value.Append("" + ...ToDate(dr[ColName].ToString().Trim(), false, false) + "").Append(",");
                        }
                    }

                }


                //去除最后的逗号
                name.Remove(name.Length - 1, 1);
                value.Remove(value.Length - 1, 1);
              
                SQl.Append("INSERT INTO ").Append(strTableName).Append("(").Append(name).Append(")values(").Append(value).Append(")");
            }
            catch
            { 
            
            }
            return SQl.ToString();
        }
拼接插入的SQL语句
    /// <summary>
        ///4.拼接删除的SQL语句 
        /// </summary>
        /// <param name="dt">表结构</param>
        /// <param name="dr">数据</param>
        /// <returns>SQL语句</returns>
        public string JHDRTempGetDelete(DataTable dt, DataRow dr, string strTableName)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("DELETE  ").Append(strTableName).Append(" WHERE ");
            DataRow[] drPK = dt.Select("CONTENTTYPE='P'");
            if (drPK.Length > 0)
            {
                for (int i = 0; i < drPK.Length; i++)
                {
                    string ColName = drPK[i]["COLUMN_NAME"].ToString().Trim();
                    sql.Append(ColName.ToUpper()).Append(" = '").Append(dr[ColName]).Append("' and ");
                }
            }

            sql.Remove(sql.Length - 4, 4);
            return sql.ToString();

        }
拼接删除表的SQL语句
 /// <summary>
        /// 5.获取更新语句 
        /// </summary>
        /// <param name="dt">表结构</param>
        /// <param name="dr">数据</param>
        /// <param name="strTableName">表名</param>
        /// <returns>SQL语句</returns>
        public string JHDRTempGetUpdate(DataTable dt, DataRow dr, string strTableName)
        {
            StringBuilder strSql = new StringBuilder();
            StringBuilder sqlUpdate = new StringBuilder();
            StringBuilder sqlWhere = new StringBuilder();
            try
            {
                //获取主键的列
                DataRow[] drPK = dt.Select("CONTENTTYPE='P'");

                //获取非主键的列
                DataRow[] drC = dt.Select("CONTENTTYPE='C'");

                if (drC.Length > 0)
                {
                    #region 非主键列赋值

                    for (int i = 0; i < drC.Length; i++)
                    {
                        string ColName = drC[i]["COLUMN_NAME"].ToString().Trim();
                        string ColType = drC[i]["DATA_TYPE"].ToString().Trim();
                        if (dr.Table.Columns.Contains(ColName))
                        {
                            if (ColType.ToUpper().Contains("VARCHAR2") || ColType.ToUpper().Contains("CHAR"))
                            {
                                //字符型数据
                                sqlUpdate.Append(ColName).Append("=").Append(dr[ColName].ToString().Trim()).Append(",");
                            }
                            else if (ColType.ToUpper().Contains("NUMBER"))
                            {
                                //数字型数据
                                if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                                {
                                    sqlUpdate.Append(ColName).Append("=").Append("null").Append(",");
                                }
                                else
                                {
                                    sqlUpdate.Append(ColName).Append("=").Append("'" + dr[ColName].ToString().Trim() + "'").Append(",");
                                }
                            }
                            else if (ColType.ToUpper().Contains("DATE"))
                            {
                                //日期类型
                                if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                                {
                                    sqlUpdate.Append(ColName).Append("=").Append("null").Append(",");
                                }
                                else
                                {
                                    sqlUpdate.Append(ColName).Append("=").Append("" + JHGlobal.DBInstance().ToDate(dr[ColName].ToString().Trim(), false, false) + "").Append(",");
                                }
                            }
                            else if (ColType.ToUpper().Contains("CLOB"))
                            {
                                //CLOB类型
                                if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                                {
                                    sqlUpdate.Append(ColName).Append("=").Append("null").Append(",");
                                }
                                else
                                {
                                    sqlUpdate.Append(ColName).Append("=").Append("'" + dr[ColName].ToString().Trim() + "'").Append(",");
                                }
                            }
                        }


                    }

                    #endregion
                }

                sqlWhere.Append(" WHERE ");

                if (drPK.Length > 0)
                {
                    #region 主键列 where条件
                    for (int i = 0; i < drPK.Length; i++)
                    {
                        string ColName = drPK[i]["COLUMN_NAME"].ToString().Trim();
                        string ColType = drPK[i]["DATA_TYPE"].ToString().Trim();
                        if (ColType.ToUpper().Contains("VARCHAR2") || ColType.ToUpper().Contains("CHAR"))
                        {
                            //字符型数据
                            sqlWhere.Append(ColName).Append("=").Append(dr[ColName].ToString().Trim()).Append(" and ");
                        }
                        else if (ColType.ToUpper().Contains("NUMBER"))
                        {
                            //数字型数据
                            if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                            {
                                sqlWhere.Append(ColName).Append("=").Append("null").Append(" and ");
                            }
                            else
                            {
                                sqlWhere.Append(ColName).Append("=").Append("'" + dr[ColName].ToString().Trim() + "'").Append(" and ");
                            }
                        }
                        else if (ColType.ToUpper().Contains("DATE"))
                        {
                            //日期类型
                            if (string.IsNullOrEmpty(dr[ColName].ToString().Trim()))
                            {
                                sqlWhere.Append(ColName).Append("=").Append("null").Append(" and ");
                            }
                            else
                            {
                                sqlWhere.Append(ColName).Append("=").Append("" + ....ToDate(dr[ColName].ToString().Trim(), false, false) + "").Append(" and ");
                            }
                        }

                    }

                    #endregion
                }

                sqlUpdate.Remove(sqlUpdate.Length - 1, 1);
                sqlWhere.Remove(sqlWhere.Length - 4, 4);

                strSql.Append("UPDATE ").Append(strTableName).Append(" SET ").Append(sqlUpdate).Append(sqlWhere);
            }
            catch (Exception ex)
            {
                JHLog.Instance().Writelog("整合更新语句:" + ex.Message);
            }
            return strSql.ToString();
        }
获取更新语句
原文地址:https://www.cnblogs.com/mengzhixingping/p/10318060.html