Example #1
0
        internal void DoReadNodes <IDbObject>(DbtFileTags top, DbtFileTags second, List <IDbObject> list)
            where IDbObject : class
        {
            Type dbobjtype = MyDbHelper.GetDbObjectType(typeof(IDbObject), _dbDefine.DbType);

            if (dbobjtype != null)
            {
                DoReadObjects <IDbObject>(dbobjtype, top, second, list);
            }
        }
Example #2
0
        public DbData GetNextDataRow()
        {
            if (_datasEnd)
            {
                return(null);
            }
            string str = "";

            while (!_fileReader.EndOfStream)
            {
                if (_hasReadDatasStart)//Datas
                {
DATA:
                    while (!_fileReader.EndOfStream)
                    {
                        if (_hasReadDataStart)//Data
                        {
                            while (!_fileReader.EndOfStream)
                            {
                                if (_hasReadValueStart || _hasReadValueContinue)//读数据
                                {
                                    if (!_hasReadValueStart)
                                    {
                                        while (!_fileReader.EndOfStream)
                                        {
                                            str = ReadLine();
                                            if (string.IsNullOrWhiteSpace(str))
                                            {
                                                continue;
                                            }
                                            if (CheckTagStart(DbtFileTags.DataValue, str))
                                            {
                                                _hasReadValueStart = true;
                                                break;
                                            }
                                            else if (CheckTagEnd(DbtFileTags.Data, str))
                                            {
                                                _hasReadDataStart     = false;
                                                _hasReadValueContinue = false;
                                                goto DATA;
                                            }
                                        }
                                    }
                                    if (!_hasReadValueStart)
                                    {
                                        return(null);
                                    }
                                    str = DoInReadTagContentNoStart(DbtFileTags.DataValue);
                                    //[1.0,1.0,"eeee","dd ","2015-10-29T00:00:00",null,null,"","rew",2222222222222.0,"你哈哈哈 ",null,null,null,null,"分隔 "]
                                    // Console.WriteLine(str);
                                    string[] objs = Newtonsoft.Json.JsonConvert.DeserializeObject <string[]>(str);
                                    object[] vals = new object[objs.Length];
                                    for (int i = 0; i < objs.Length; i++)
                                    {
                                        if (objs[i] == null)
                                        {
                                            vals[i] = null;
                                            continue;
                                        }
                                        if (curTableColumnType[i] == typeof(sbyte))
                                        {
                                            vals[i] = sbyte.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(short))
                                        {
                                            vals[i] = short.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(ushort))
                                        {
                                            vals[i] = ushort.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(int))
                                        {
                                            vals[i] = int.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(uint))
                                        {
                                            vals[i] = uint.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(long))
                                        {
                                            vals[i] = long.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(ulong))
                                        {
                                            vals[i] = ulong.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(decimal))
                                        {
                                            vals[i] = decimal.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(float))
                                        {
                                            vals[i] = float.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(double))
                                        {
                                            vals[i] = double.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(bool))
                                        {
                                            vals[i] = bool.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(char))
                                        {
                                            vals[i] = char.Parse(objs[i]);
                                        }
                                        else if (curTableColumnType[i] == typeof(DateTime))
                                        {
                                            vals[i] = DateTime.Parse(objs[i]);
                                        }
                                        else
                                        {
                                            vals[i] = objs[i];
                                        }
                                    }
                                    DbData data = new DbData(_dbDefine.DbType, curTableName, curTableColumnNames, curTableColumnType, curTableDbColumnType, null);
                                    data.TableDataRow.base64TableValues = vals;
                                    data.TableDataRow.ConvertValuesFromBase64();
                                    _hasReadValueStart    = false;
                                    _hasReadValueContinue = true;
                                    return(data);
                                }
                                else//读列定义
                                {
                                    while (!_fileReader.EndOfStream)
                                    {
                                        str = ReadLine();
                                        if (string.IsNullOrWhiteSpace(str))
                                        {
                                            continue;
                                        }
                                        if (CheckTagStart(DbtFileTags.DataTableName, str))
                                        {
                                            curTableName = Newtonsoft.Json.JsonConvert.DeserializeObject <string>(DoInReadTagContentNoStart(DbtFileTags.DataTableName));
                                        }
                                        else if (CheckTagStart(DbtFileTags.DataColumnType, str))
                                        {
                                            curTableColumnType = Newtonsoft.Json.JsonConvert.DeserializeObject <Type[]>(DoInReadTagContentNoStart(DbtFileTags.DataColumnType));
                                        }
                                        else if (CheckTagStart(DbtFileTags.DataColumnDbType, str))
                                        {
                                            Type type = MyDbHelper.GetDbObjectType(typeof(IDataDbType[]), _dbtFile.DbType);
                                            str = DoInReadTagContentNoStart(DbtFileTags.DataColumnDbType);
                                            Array objs = (Array)Newtonsoft.Json.JsonConvert.DeserializeObject(str, type);
                                            curTableDbColumnType = new object[objs.Length];
                                            objs.CopyTo(curTableDbColumnType, 0);

                                            /*
                                             * switch (_dbtFile.DbType)
                                             * {
                                             *  case MyDbType.None:
                                             *      break;
                                             *  case MyDbType.Oracle:
                                             *      OracleDbType[] dbtypes = Newtonsoft.Json.JsonConvert.DeserializeObject<OracleDbType[]>(DoInReadTagContentNoStart(DbtFileTags.DataColumnDbType));
                                             *      curTableDbColumnType = new object[dbtypes.Length];
                                             *      for (int i=0;i<dbtypes.Length;i++)
                                             *      {
                                             *          curTableDbColumnType[i] = dbtypes[i];
                                             *      }
                                             *      break;
                                             *  case MyDbType.MySql:
                                             *      break;
                                             *  case MyDbType.SqlServer:
                                             *      break;
                                             *  default:
                                             *      break;
                                             * }*/
                                        }
                                        else if (CheckTagStart(DbtFileTags.DataCulumnName, str))
                                        {
                                            curTableColumnNames = Newtonsoft.Json.JsonConvert.DeserializeObject <string[]>(DoInReadTagContentNoStart(DbtFileTags.DataCulumnName));
                                        }
                                        else if (CheckTagStart(DbtFileTags.DataCount, str))
                                        {
                                            curTableDataCount = Newtonsoft.Json.JsonConvert.DeserializeObject <decimal>(str);
                                        }
                                        else if (CheckTagStart(DbtFileTags.DataValue, str))
                                        {
                                            _hasReadValueStart = true;
                                            break;
                                        }
                                        else if (CheckTagEnd(DbtFileTags.Data, str))
                                        {
                                            _hasReadDataStart = false;
                                            goto DATA;
                                        }
                                    }
                                }
                            }
                            break;
                        }
                        else
                        {
                            str = ReadLine();
                            if (string.IsNullOrWhiteSpace(str))
                            {
                                continue;
                            }
                            if (CheckTagStart(DbtFileTags.Data, str))
                            {
                                _hasReadDataStart = CheckTagStart(DbtFileTags.Data, str);
                            }
                            else if (CheckTagEnd(DbtFileTags.Datas, str))
                            {
                                _datasEnd = true;
                                return(null);
                            }
                        }
                    }
                    break;
                }
                else
                {
                    str = ReadLine();
                    if (string.IsNullOrWhiteSpace(str))
                    {
                        continue;
                    }
                    _hasReadDatasStart = CheckTagStart(DbtFileTags.Datas, str);
                    if (!_hasReadDatasStart)
                    {
                        if (CheckTagEnd(DbtFileTags.DbTFile, str))
                        {
                            _datasEnd = true;
                            return(null);
                        }
                    }
                }
            }
            return(null);
        }