根据表结构进行插入修改删除语句的整合:
开发语言: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(); }

/// <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(); }

/// <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(); }