/// <summary> /// insert () select /// </summary> /// <param name="SelectCmd"></param> /// <param name="Columns">select的字段</param> /// <returns></returns> public virtual bool Insert(ODACmd SelectCmd, params IODAColumns[] Columns) { try { var sql = new ODAScript() { ScriptType = SQLType.Insert, }; sql.SqlScript.Append("INSERT INTO ").Append(this.CmdName).Append("("); string Column = ""; for (int i = 0; i < Columns.Length; i++) { if (string.IsNullOrWhiteSpace(Columns[i].AliasName)) { Column += Columns[i].ColumnName + ","; } else { Column += Columns[i].AliasName + ","; } } sql.SqlScript.Append(Column.Remove(Column.Length - 1, 1)).Append(") "); var sSql = SelectCmd.GetSelectSql(Columns); sql.Merge(sSql); var db = this.GetDBAccess(sql); if (db == null) { throw new ODAException(10016, "ODACmd Insert 没有执行程序"); } var prms = sql.ParamList.ToArray(); return(db.ExecuteSQL(sql.SqlScript.ToString(), prms) > 0); } finally { this.Clear(); } }
/// <summary> /// 在数据库中Procedure /// </summary> /// <param name="Params">存储过程的参数及其值</param> /// <returns></returns> public virtual DataSet Procedure(params IODAColumns[] Params) { try { string sqlScript = ""; var prms = this.GetProcedureSql(out sqlScript, Params); var sql = new ODAScript() { ScriptType = SQLType.Procedure, }; sql.ParamList.AddRange(prms); sql.TableList.Add(sqlScript); var db = this.GetDBAccess(sql); if (db == null) { throw new ODAException(10017, "ODACmd Procedure 没有执行程序"); } return(db.ExecuteProcedure(sqlScript, prms)); } finally { this.Clear(); } }
/// <summary> /// 生成查询语句 /// </summary> /// <param name="SelectSql">sql脚本</param> /// <param name="Cols">变量列表及变操作符</param> /// <returns>变量列表</returns> public virtual ODAScript GetSelectSql(params IODAColumns[] Cols) { ODAScript sql = new ODAScript() { ScriptType = SQLType.Select, }; if (_Distinct) { sql.SqlScript.Append("SELECT DISTINCT "); } else { sql.SqlScript.Append("SELECT "); } if (Cols == null || Cols.Length == 0) { sql.SqlScript.Append(" * "); } else { string SubSelectSql = ""; ODAParameter[] SubSelectPrms = GetSelectColumns(",", out SubSelectSql, Cols); sql.SqlScript.Append(SubSelectSql); if (SubSelectPrms != null && SubSelectPrms.Length > 0) { sql.ParamList.AddRange(SubSelectPrms); } } var fSql = this.GetFromSubString(); sql.Merge(fSql); if (_WhereList.Count > 0 || _OrList.Count > 0) { sql.SqlScript.Append(" WHERE "); var asql = GetWhereSubSql(_WhereList, " AND "); sql.Merge(asql); if (_OrList.Count > 0) { if (_WhereList.Count > 0) { sql.SqlScript.Append(" OR "); } var osql = GetWhereSubSql(_OrList, " OR "); sql.Merge(osql); } } if (_Groupby.Count > 0) { var gy = GetGroupByColumns(_Groupby.ToArray()); sql.SqlScript.Append(" GROUP BY "); sql.Merge(gy); } if (_Having.Count > 0) { var hsql = GetWhereSubSql(_Having, " AND "); sql.SqlScript.Append(" HAVING "); sql.Merge(hsql); } if (_UnionCmd.Count > 0) { for (int i = 0; i < _UnionCmd.Count; i++) { sql.SqlScript.AppendLine(" "); sql.SqlScript.AppendLine(_UnionCmd[i].JoinScript); var Union = _UnionCmd[i].UnionCmd.GetCmdSql(); Union.SqlScript.Remove(0, 1); Union.SqlScript.Remove(Union.SqlScript.Length - 1, 1); sql.Merge(Union); } } if (_Orderby.Count > 0) { var oy = GetOrderbyColumns(_Orderby.ToArray()); sql.OrderBy.Clear(); sql.OrderBy.Append(" ORDER BY "); sql.OrderBy.Append(oy.OrderBy.ToString()); sql.SqlScript.Append(sql.OrderBy.ToString()); sql.Merge(oy); } return(sql); }
private ODAScript GetCaseWhenSql() { ODAScript sql = new ODAScript(); sql.SqlScript.Append("( CASE "); foreach (KeyValuePair <ODAColumns, object> wt in _WhenThen) { sql.SqlScript.Append(" WHEN "); var wSql = ((IODAColumns)wt.Key).GetWhereSubstring(); sql.Merge(wSql); if (wt.Value is ODAColumns) { sql.SqlScript.Append(" THEN ").Append(((ODAColumns)wt.Value).ODAColumnName); } else if (wt.Value is System.DBNull) { sql.SqlScript.Append(" THEN NULL "); } else { ODAParameter paramSub = new ODAParameter(); paramSub.ColumnName = wt.Key.ODAColumnName; paramSub.ParamsName = ODAParameter.ODAParamsMark + _Cmd.GetAlias(); paramSub.ParamsValue = wt.Value; paramSub.Direction = System.Data.ParameterDirection.Input; paramSub.Size = 2000; paramSub.DBDataType = (wt.Value is DateTime ? ODAdbType.ODatetime : wt.Value.GetType().IsPrimitive ? ODAdbType.ODecimal : ODAdbType.OVarchar); sql.SqlScript.Append(" THEN ").Append(paramSub.ParamsName); sql.ParamList.Add(paramSub); } } if (_CaseElseVal is ODAColumns) { string slt; ODAParameter[] sltPrm = ((IODAColumns)_CaseElseVal).GetSelectColumn(out slt); if (sltPrm != null && sltPrm.Length > 0) { sql.ParamList.AddRange(sltPrm); } sql.SqlScript.Append(" ELSE ").Append(slt).Append(" END )"); } else if (_CaseElseVal is System.DBNull || _CaseElseVal == null || string.IsNullOrWhiteSpace(_CaseElseVal.ToString())) { sql.SqlScript.Append(" ELSE NULL END ) "); } else { ODAParameter paramSub = new ODAParameter(); paramSub.ColumnName = ""; paramSub.ParamsName = ODAParameter.ODAParamsMark + _Cmd.GetAlias(); paramSub.ParamsValue = _CaseElseVal; paramSub.Direction = System.Data.ParameterDirection.Input; paramSub.Size = 2000; paramSub.DBDataType = (_CaseElseVal is DateTime ? ODAdbType.ODatetime : _CaseElseVal.GetType().IsPrimitive ? ODAdbType.ODecimal : ODAdbType.OVarchar); sql.SqlScript.Append(" ELSE ").Append(paramSub.ParamsName).Append(" END ) "); sql.ParamList.Add(paramSub); } _FuncName = ""; return(sql); }
private ODAScript GetCaseSql() { ODAScript sql = new ODAScript(); sql.SqlScript.Append("( CASE ").Append(_CaseCol.ODAColumnName); foreach (KeyValuePair <object, object> wt in _CaseThen) { if (wt.Key is ODAColumns) { sql.SqlScript.Append(" WHEN ").Append(((IODAColumns)wt.Key).GetColumnName()); } else if (wt.Key is System.DBNull) { sql.SqlScript.Append(" WHEN NULL "); } else { ODAParameter paramSub = new ODAParameter(); paramSub.ColumnName = _CaseCol.ODAColumnName; paramSub.ParamsName = ODAParameter.ODAParamsMark + _Cmd.GetAlias(); paramSub.ParamsValue = wt.Key; paramSub.Direction = System.Data.ParameterDirection.Input; paramSub.Size = 2000; paramSub.DBDataType = (wt.Key is DateTime ? ODAdbType.ODatetime : wt.Value.GetType().IsPrimitive ? ODAdbType.ODecimal : ODAdbType.OVarchar); sql.SqlScript.Append(" WHEN ").Append(paramSub.ParamsName); sql.ParamList.Add(paramSub); } if (wt.Value is ODAColumns) { sql.SqlScript.Append(" THEN ").Append(((ODAColumns)wt.Value).ODAColumnName); } else if (wt.Value is System.DBNull) { sql.SqlScript.Append(" THEN NULL "); } else { ODAParameter paramSub = new ODAParameter(); paramSub.ColumnName = _CaseCol.ODAColumnName; paramSub.ParamsName = ODAParameter.ODAParamsMark + _Cmd.GetAlias();; paramSub.ParamsValue = wt.Value; paramSub.Direction = System.Data.ParameterDirection.Input; paramSub.Size = 2000; paramSub.DBDataType = (wt.Value is DateTime ? ODAdbType.ODatetime : wt.Value.GetType().IsPrimitive ? ODAdbType.ODecimal : ODAdbType.OVarchar); sql.SqlScript.Append(" THEN ").Append(paramSub.ParamsName); sql.ParamList.Add(paramSub); } } if (_CaseElseVal is ODAColumns) { sql.SqlScript.Append(" ELSE ").Append(((IODAColumns)_CaseElseVal).GetColumnName()).Append(" END )"); } else if (_CaseElseVal is System.DBNull || _CaseElseVal == null || string.IsNullOrWhiteSpace(_CaseElseVal.ToString())) { sql.SqlScript.Append(" ELSE NULL END ) "); } else { ODAParameter paramSub = new ODAParameter(); paramSub.ColumnName = _CaseCol.ODAColumnName; paramSub.ParamsName = ODAParameter.ODAParamsMark + _Cmd.GetAlias(); paramSub.ParamsValue = _CaseElseVal; paramSub.Direction = System.Data.ParameterDirection.Input; paramSub.Size = 2000; paramSub.DBDataType = (_CaseElseVal is DateTime ? ODAdbType.ODatetime : _CaseElseVal.GetType().IsPrimitive ? ODAdbType.ODecimal : ODAdbType.OVarchar); sql.SqlScript.Append(" ELSE ").Append(paramSub.ParamsName).Append(" END ) "); sql.ParamList.Add(paramSub); } this._FuncName = ""; return(sql); }
protected virtual ODAScript GetWhereSubstring() { ODAScript sql = new ODAScript(); sql.SqlScript.Append(GetColumnName()); if (_CompareValue is ODAColumns) { switch (_Symbol) { case CmdConditionSymbol.BIGGER: sql.SqlScript.Append(" > "); break; case CmdConditionSymbol.EQUAL: sql.SqlScript.Append(" = "); break; case CmdConditionSymbol.LIKE: sql.SqlScript.Append(" LIKE "); break; case CmdConditionSymbol.NOTLIKE: sql.SqlScript.Append(" NOT LIKE "); break; case CmdConditionSymbol.NOTBIGGER: sql.SqlScript.Append(" <= "); break; case CmdConditionSymbol.NOTEQUAL: sql.SqlScript.Append(" <> "); break; case CmdConditionSymbol.NOTSMALLER: sql.SqlScript.Append(" >= "); break; case CmdConditionSymbol.SMALLER: sql.SqlScript.Append(" < "); break; case CmdConditionSymbol.ADD: sql.SqlScript.Append(" + "); break; case CmdConditionSymbol.REDUCE: sql.SqlScript.Append(" - "); break; case CmdConditionSymbol.TAKE: sql.SqlScript.Append(" * "); break; case CmdConditionSymbol.REMOVE: sql.SqlScript.Append(" / "); break; case CmdConditionSymbol.STAY: sql.SqlScript.Append(" % "); break; default: throw new ODAException(20005, string.IsNullOrEmpty(_ColumnComment) ? _ColumnName + " not assign" : _ColumnComment + "CmdConditionSymbol Errror"); } if (((ODAColumns)_CompareValue)._Symbol == CmdConditionSymbol.NONE) { sql.SqlScript.Append(((ODAColumns)_CompareValue).ODAColumnName); } else { var sub = ((IODAColumns)_CompareValue).GetWhereSubstring(); sql.Merge(sub); } } else { ODAParameter param = new ODAParameter(); string PName = ODAParameter.ODAParamsMark + _Cmd.GetAlias(); param.ColumnName = this.ODAColumnName; param.ParamsName = PName; param.ParamsValue = _CompareValue == null ? System.DBNull.Value : _CompareValue; param.DBDataType = _DBDataType; param.Direction = _PDirection; param.Size = _Size; switch (_Symbol) { case CmdConditionSymbol.BIGGER: sql.SqlScript.Append(" > ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.EQUAL: sql.SqlScript.Append(" = ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.IN: if (_InCmd == null && _CompareValue != System.DBNull.Value) { object[] ValueList = (object[])_CompareValue; string paramName = _Cmd.GetAlias(); sql.SqlScript.Append(" IN ("); for (int k = 0; k < ValueList.Length; k++) { ODAParameter paramSub = new ODAParameter(); paramSub.ColumnName = this.ODAColumnName; paramSub.ParamsName = ODAParameter.ODAParamsMark + paramName + "_" + k.ToString(); paramSub.ParamsValue = ValueList[k]; paramSub.DBDataType = _DBDataType; paramSub.Direction = _PDirection; paramSub.Size = _Size; sql.SqlScript.Append(paramSub.ParamsName).Append(","); sql.ParamList.Add(paramSub); } sql.SqlScript.Remove(sql.SqlScript.Length - 1, 1).Append(")"); } else { var subSql = ((ODACmd)_InCmd).GetSelectSql(_InColumn); string inSql = " IN ( " + subSql.SqlScript.ToString() + ")"; subSql.SqlScript.Clear(); subSql.SqlScript.Append(inSql); sql.Merge(subSql); } break; case CmdConditionSymbol.NOTIN: if (_InCmd == null && _CompareValue != System.DBNull.Value) { object[] ValueList = (object[])_CompareValue; sql.SqlScript.Append(" NOT IN ("); string paramName = _Cmd.GetAlias(); for (int k = 0; k < ValueList.Length; k++) { ODAParameter paramSub = new ODAParameter(); paramSub.ColumnName = this.ODAColumnName; paramSub.ParamsName = ODAParameter.ODAParamsMark + paramName + "_" + k.ToString(); paramSub.ParamsValue = ValueList[k]; paramSub.DBDataType = _DBDataType; paramSub.Direction = _PDirection; paramSub.Size = _Size; sql.SqlScript.Append(paramSub.ParamsName).Append(","); sql.ParamList.Add(paramSub); } sql.SqlScript.Remove(sql.SqlScript.Length - 1, 1).Append(")"); } else { var subSql = ((ODACmd)_InCmd).GetSelectSql(_InColumn); string inSql = " NOT IN ( " + subSql.SqlScript.ToString() + ")"; subSql.SqlScript.Clear(); subSql.SqlScript.Append(inSql); sql.Merge(subSql); } break; case CmdConditionSymbol.LIKE: sql.SqlScript.Append(" LIKE ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.NOTLIKE: sql.SqlScript.Append(" NOT LIKE ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.NOTBIGGER: sql.SqlScript.Append(" <= ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.NOTEQUAL: sql.SqlScript.Append(" <> ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.NOTSMALLER: sql.SqlScript.Append(" >= ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.SMALLER: sql.SqlScript.Append(" < ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.ISNOTNULL: sql.SqlScript.Append(" IS NOT NULL "); break; case CmdConditionSymbol.ISNULL: sql.SqlScript.Append(" IS NULL "); break; case CmdConditionSymbol.ADD: sql.SqlScript.Append(" + ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.REDUCE: sql.SqlScript.Append(" - ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.TAKE: sql.SqlScript.Append(" * ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.REMOVE: sql.SqlScript.Append(" / ").Append(param.ParamsName); sql.ParamList.Add(param); break; case CmdConditionSymbol.STAY: sql.SqlScript.Append(" % ").Append(param.ParamsName); sql.ParamList.Add(param); break; default: throw new ODAException(20006, string.IsNullOrWhiteSpace(_ColumnComment) ? _ColumnName + " not assign" : _ColumnComment + "CmdConditionSymbol Errror"); } } var ar = new ODAScript(); for (int i = 0; i < _SqlColumnList.Count; i++) { ar.SqlScript.Append(_SqlColumnList[i].ConnScript); var cc = _SqlColumnList[i].SqlColumn.GetWhereSubstring(); ar.Merge(cc); } if (ar.SqlScript.Length > 0) { sql.Merge(ar); sql.SqlScript.Insert(0, "(").Append(")"); } return(sql); }