Beispiel #1
0
//        /// <summary>
//        /// 서버의 DataTable을 클라이언트의 자바스크립트에서 쓸 수 있도록 변경함.
//        /// </summary>
//        /// <param name="dt"></param>
//        /// <param name="AddScriptTag">&lt;script&gt; 태그 추가</param>
//        /// <remarks>오라클의 경우는 필드 이름이 전부 대문자로 리턴되므로 소문자로 변경하려면 ColumnNameToLower 인수를 true로 할 것.</remarks>
//        /// <returns></returns>
//        private static string GetClientDataSet(object DataSetOrDataTable, string VarName, bool IsArray, bool IsDataTable, bool ColumnNameToLower, bool AddScriptTag)
//        {
//            List<DataSet> ads = new List<DataSet>();
//            List<DataTable> adt = new List<DataTable>();

//            if (IsDataTable)
//            {
//                if (IsArray)
//                {
//                    adt.AddRange((IEnumerable<DataTable>)DataSetOrDataTable);
//                }
//                else
//                {
//                    adt.Add((DataTable)DataSetOrDataTable);
//                }
//            }
//            else
//            {
//                if (IsArray)
//                {
//                    ads.AddRange((IEnumerable<DataSet>)DataSetOrDataTable);
//                }
//                else
//                {
//                    ads.Add((DataSet)DataSetOrDataTable);
//                }
//            }

//            List<string> aStmt = new List<string>();

//            if (IsDataTable)
//            {
//                if (IsArray)
//                {
//                    aStmt.Add("var " + VarName + " = [];");
//                }

//                for (int nTbl = 0; nTbl < adt.Count; nTbl++)
//                {
//                    DataTable dt = adt[nTbl];

//                    string VarNameCur = IsArray ? VarName + "[" + nTbl + "]" : VarName;
//                    aStmt = GetClientDataTableCommon(aStmt, dt, VarNameCur, ColumnNameToLower);
//                }
//            }
//            else
//            {
//                /*
//var ads = [];

//ads[0] = { };
//ads[0].Tables = [];
//ads[0].Tables[0] = new CDataTable();
//ads[0].Tables[1] = new CDataTable();


//ads[1].Tables = [];
//ads[1].Tables[0] = new CDataTable();
//ads[1].Tables[1] = new CDataTable();


//var ds = { };
//ds.Tables = [];
//ds.Tables[0] = new CDataTable();
//ds.Tables[1] = new CDataTable();

//*/
//                if (IsArray)
//                    aStmt.Add("var " + VarName + " = [];");
//                else
//                    aStmt.Add("var " + VarName + " = { Tables: [] };");

//                for (int nDs = 0; nDs < ads.Count; nDs++)
//                {
//                    DataSet ds = ads[nDs];

//                    if (IsArray)
//                        aStmt.Add(VarName + "[" + nDs + "] = { Tables: [] };");

//                    string VarNameCur = IsArray ? VarName + "[" + nDs + "].Tables" : VarName + ".Tables";

//                    for (int nTbl = 0; nTbl < ds.Tables.Count; nTbl++)
//                    {
//                        DataTable dt = ds.Tables[nTbl];

//                        string VarNameCur2 = VarNameCur + "[" + nTbl + "]";
//                        aStmt = GetClientDataTableCommon(aStmt, dt, VarNameCur2, ColumnNameToLower);
//                    }
//                }
//            }


//            string s = CScript.GetScript(aStmt, AddScriptTag);
//            return s;
//        }
        //private static List<string> GetClientDataTableCommon(List<string> aStmt, DataTable dt, string VarName, bool ColumnNameToLower)
        //{
        //    aStmt.Add(VarName + " = new CDataTable();");

        //    string[] aColName = GetColumnNameInArray(dt, ColumnNameToLower);

        //    string ColumnNameList = "";
        //    for (int cl = 0; cl < aColName.Length; cl++)
        //    {
        //        ColumnNameList += ", \"" + aColName[cl] + "\"";
        //    }
        //    ColumnNameList = ColumnNameList.Substring(2);
        //    aStmt.Add(VarName + ".Columns = [ " + ColumnNameList + " ];");

        //    string RowList = GetClientDataRow(dt, aColName);
        //    aStmt.Add(VarName + ".Rows = " + RowList + ";");

        //    return aStmt;
        //}

        //public static string GetClientDataRow(DataTable dt, string[] aColName)
        //{
        //    List<string> aRow = new List<string>();
        //    for (int rw = 0, rw2 = dt.Rows.Count; rw < rw2; rw++)
        //    {
        //        DataRow dr = dt.Rows[rw];

        //        string[] aNameValue = new string[dt.Columns.Count];
        //        for (int cl = 0, cl2 = dt.Columns.Count; cl < cl2; cl++)
        //        {
        //            object oValue = dr[cl];

        //            string Text = GetValueForJson(oValue);

        //            //JSON 형식을 리턴할 때 Name에 큰 따옴표를 붙여야만 에러를 내지 않음.
        //            aNameValue[cl] = "\"" + aColName[cl] + "\":" + Text;
        //        }
        //        string NameValueList = string.Join(", ", aNameValue);
        //        aRow.Add("{ " + NameValueList + " }");
        //    }

        //    string RowList = "[ " + string.Join(",\r\n", aRow.ToArray()) + " ]";
        //    return RowList;
        //}
        //public static string GetClientDataRow(DataTable dt)
        //{
        //    string[] aColName = GetColumnNameInArray(dt);
        //    return GetClientDataRow(dt, aColName);
        //}

        /// <summary>
        /// JSON 형식으로 리턴하기 위함.
        /// null은 null로, 날짜 형식과 문자열은 따옴표를 양쪽에 묶고, 나머지는 따옴표를 묶지 않은 값을 리턴함.
        /// </summary>
        /// <param name="oValue"></param>
        /// <returns></returns>
        public static string GetValueForJson(object oValue)
        {
            string NullString = "null";
            string Delim      = "";

            string Text = CType.ConvertColumnValueToString(oValue, NullString);

            if (Text != NullString)
            {
                SqlColumnTypeSimple TypeSimple = CSql.GetColumnTypeSimple(oValue);
                if (TypeSimple == SqlColumnTypeSimple.DateTime)
                {
                    Delim = "\"";

                    var dtValue = (DateTime)oValue;
                    Text = Delim + dtValue.ToString(CConst.Format_yyyy_MM_dd_HH_mm_ss_fff) + Delim;

                    //new Date는 JSON 형식에 맞지 않으므로 주석.
                    //Text = string.Format("new Date({0}, {1}, {2}, {3}, {4}, {5}, {6})",
                    //    dtValue.Year, dtValue.Month - 1, dtValue.Day,
                    //    dtValue.Hour, dtValue.Minute, dtValue.Second, dtValue.Millisecond);
                }
                else if (TypeSimple == SqlColumnTypeSimple.Boolean)
                {
                    Text = (bool)oValue ? "true" : "false";
                }
                else
                {
                    Delim = (TypeSimple == SqlColumnTypeSimple.String) ? "\"" : "";
                    Text  = Delim + CScript.ReplaceForScriptVariable(Text) + Delim;
                }
            }

            return(Text);
        }
Beispiel #2
0
        private static string GetSqlTemplateReplaced(string Sql, DbServerType DSType, List <CSqlNameValueKeepValue> aNameValueKeepValue)
        {
            foreach (CSqlNameValueKeepValue nvk in aNameValueKeepValue)
            {
                string FieldName = nvk.Name;
                bool   KeepValue = nvk.KeepValue;

                string Value = "";
                if (nvk.Value == null)
                {
                    Value = "null";
                }
                else if (KeepValue)
                {
                    //함수나 연산자가 사용된 경우엔 변형하지 않음.
                    Value = nvk.Value.ToString();
                }
                else
                {
                    SqlColumnTypeSimple ColumnType = GetColumnTypeSimple(nvk.Value);

                    switch (ColumnType)
                    {
                    case SqlColumnTypeSimple.DateTime:
                    case SqlColumnTypeSimple.String:
                        Value = nvk.Value.ToString();

                        Value = "'" + Value.Replace("'", "''");

                        if (DSType == DbServerType.MySQL)
                        {
                            Value = Value.Replace(@"\", @"\\");
                        }

                        Value += "'";

                        break;

                    case SqlColumnTypeSimple.Boolean:
                        Value = CFindRep.IfTrueThen1FalseThen0((bool)nvk.Value);
                        break;

                    case SqlColumnTypeSimple.Numeric:
                        Value = nvk.Value.ToString();
                        break;
                    }
                }

                Sql = Sql.Replace("{{" + FieldName + "}}", Value);
            }

            return(Sql);
        }
Beispiel #3
0
        ///// <summary>
        ///// \r\n, \r, \n, \t 등 정상적으로 입력되지 않는 문자열이 구분자로 쓰였다면
        ///// 해당 문자열들을 CD in (1, 2, 3)과 in 절에 넣을 수 있도록 "1, 2, 3"과 같이 변환해서 리턴함.
        ///// </summary>
        ///// <param name="Value"> </param>
        ///// <param name="IsNumberType">숫자형식의 필드인 지 여부 </param>
        ///// <param name="IsMultipleIs">in 절에 들어갈 수 있도록 콤마로 구분된 값으로 변환되었는 지 여부 </param>
        ///// <example>
        ///// bool IsMultipleIs;
        ///// string SQL = "", SQLIn = "";
        /////
        ///// SQL = "select * from CodeList";
        ///// SQLIn = GetInList("1\t2\t3", true, out IsMultipleIs);
        ///// if (IsMultipleIs)
        ///// {
        /////   SQL += " where Code in (" + SQLIn + ")";
        ///// }
        ///// else
        ///// {
        /////   SQL += " where Code = " + SQLIn;
        ///// }
        ///// Console.WriteLine(SQL); //"select * from CodeList where Code in (1, 2, 3)"
        /////
        ///// SQL = "select * from JobList";
        ///// SQLIn = GetInList("학생\t교사\t프로그래머", false, out IsMultipleIs);
        ///// if (IsMultipleIs)
        ///// {
        /////   SQL += " where JobName in (" + SQLIn + ")";
        ///// }
        ///// else
        ///// {
        /////   SQL += " where JobName = " + SQLIn;
        ///// }
        ///// Console.WriteLine(SQL); //"select * from JobList where JobName in ('학생', '교사', '프로그래머')"
        ///// </example>
        //public static string GetInList(string Value, bool IsNumberType,
        //                                out bool IsMultipleIs)
        //{
        //    char[] Delim;
        //    string ValueList = "";

        //    IsMultipleIs = false;

        //    Delim = GetDelimChar(Value);
        //    if (Delim.Length == 0)
        //    {
        //        return Value;
        //    }

        //    ValueList = GetInList(Value.Split(Delim), IsNumberType);

        //    IsMultipleIs = true;
        //    return ValueList;
        //}

        public static string GetInList <T>(T[] aValue)
        {
            string ValueList = "";

            SqlColumnTypeSimple TypeSimple = GetColumnTypeSimple(typeof(T));
            string Delim = CLang.In(TypeSimple, SqlColumnTypeSimple.DateTime, SqlColumnTypeSimple.String) ? "'" : "";

            for (int i = 0; i < aValue.Length; i++)
            {
                ValueList += "," + Delim + aValue[i] + Delim;
            }
            if (!string.IsNullOrEmpty(ValueList))
            {
                ValueList = ValueList.Substring(1);
            }

            return(ValueList);
        }
Beispiel #4
0
        public static void SortByRelation(DataTable dt, string ColumnNameId, string ColumnNameParentId)
        {
            DataRow[] adr = dt.Select(string.Format("{0} > ''", ColumnNameParentId));
            if (adr.Length == 0)
            {
                return;
            }

            object ParentId = adr[0][ColumnNameParentId];
            SqlColumnTypeSimple ColumnType = CSql.GetColumnTypeSimple(ParentId);

            if ((ColumnType == SqlColumnTypeSimple.DateTime) || (ColumnType == SqlColumnTypeSimple.Boolean))
            {
                throw new Exception(string.Format("ColumnType: '{0}' is not allowed.", ColumnType));
            }

            string Parenthesis = (ColumnType == SqlColumnTypeSimple.String) ? "'" : "";

            //하위 행을 추가할 때 원래의 순서를 유지하기 위해 거꾸로 루핑을 함
            for (int rw = (adr.Length - 1); rw >= 0; rw--)
            {
                DataRow dr          = adr[rw];
                object  ParentIdCur = dr[ColumnNameParentId];

                string    Filter    = string.Format("{0} = {1}{2}{1}", ColumnNameId, Parenthesis, ParentIdCur);
                DataRow[] adrParent = dt.Select(Filter);
                if (adrParent.Length == 0)
                {
                    continue;
                }
                else if (adrParent.Length >= 2)
                {
                    throw new Exception(string.Format("{0} is not unique. Duplicated value: {1}", ColumnNameId, ParentIdCur));
                }

                DataRow drParent = adrParent[0];
                CDataTable.MoveRow(dt, dt.Rows.IndexOf(dr), dt.Rows.IndexOf(drParent) + 1);
            }
        }