zoukankan      html  css  js  c++  java
  • 根据数据库表结构来整合插入、删除、更新语句

    根据表结构进行插入修改删除语句的整合:
    开发语言: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();
            }
    获取更新语句
  • 相关阅读:
    POJ3311Hie with the Pie(floyd传递+DP,状态压缩)
    POJ1185炮兵阵地(DP状态压缩)
    POJ3254Corn Fields (状态压缩or插头DP)
    eBPF Tracing 入门教程与实例
    因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug
    DRDS 数据恢复重磅发布,全方位保障您的数据安全
    前沿 | 全球最具影响力开源数据库峰会开幕在即 阿里云精彩议题先睹为快
    MaxCompute 预付费标准版VS套餐版
    DTCC 2019 | 深度解码阿里数据库实现 数据库内核——基于HLC的分布式事务实现深度剖析
    从 Apache ORC 到 Apache Calcite | 2019大数据技术公开课第一季《技术人生专访》
  • 原文地址:https://www.cnblogs.com/mengzhixingping/p/10318060.html
Copyright © 2011-2022 走看看