본문 바로가기
창고

C# DataTable을 문자열 string으로 변환하는 방법 (Feat. Telegram 텍스트 전송용)

by 긍정왕수전노 2020. 6. 27.
반응형

DataTable을 텔레그램 텍스트 메시지로 전송할 수 있게 문자열로 변환하는 메소드 입니다.

        #region   DataTable을 String으로 변환
        public static string DataTable2String(DataTable dataTable)
        {
            StringBuilder sb = new StringBuilder();
            if (dataTable != null)
            {
                string seperator = " | ";

                #region get min length for columns
                System.Collections.Hashtable hash = new System.Collections.Hashtable();
                foreach (DataColumn col in dataTable.Columns)
                    hash[col.ColumnName] = col.ColumnName.Length;
                foreach (DataRow row in dataTable.Rows)
                {
                    if (row[0] != DBNull.Value)
                    {
                        for (int i = 0; i < row.ItemArray.Length; i++)
                            if (row[i] != DBNull.Value)
                                if (((string)row[i]).Length > (int)hash[dataTable.Columns[i].ColumnName])
                                    hash[dataTable.Columns[i].ColumnName] = ((string)row[i]).Length;
                    }
                }
                int rowLength = (hash.Values.Count + 1) * seperator.Length;
                foreach (object o in hash.Values)
                    rowLength += (int)o;
                #endregion get min length for columns

                sb.Append(new string('=', 10));

                if (!string.IsNullOrEmpty(dataTable.TableName))
                    sb.Append(String.Format(" {0} ", dataTable.TableName));
                else
                    sb.Append(" DataTable ");

                sb.AppendLine(new string('=', 10));

                #region write values
                foreach (DataColumn col in dataTable.Columns)
                    sb.Append(seperator + String.Format("{0,-" + hash[col.ColumnName] + "}", col.ColumnName));
                sb.AppendLine(seperator);
                sb.AppendLine(new string('-', 22 + dataTable.TableName.Length));
                foreach (DataRow row in dataTable.Rows)
                {
                    if (row[0] != DBNull.Value)
                    {
                        for (int i = 0; i < row.ItemArray.Length; i++)
                        {
                            object cellVal = row[i].ToString();
                            if (cellVal.ToString() == "")
                            {
                                for (int j = 0; j < int.Parse(hash[dataTable.Columns[i].ColumnName].ToString()); j++)
                                {
                                    cellVal += "~ ";
                                }
                            }

                            sb.Append(seperator + String.Format("{0," + hash[dataTable.Columns[i].ColumnName] + "}", cellVal));
                            if (i == row.ItemArray.Length - 1)
                                sb.AppendLine(seperator);
                        }
                    }
                }
                #endregion write values

                sb.AppendLine(new string('=', 22 + dataTable.TableName.Length));
            }
            else
                sb.AppendLine("===== DataTable is NULL =====");

            return sb.ToString();
        }
        #endregion
반응형