コード例 #1
0
ファイル: DBHelper.cs プロジェクト: piaolingzxh/Justin
        public static DataTable ConvertDataReaderToDataTable(DbDataReader reader)
        {
            try
            {
                DataTable table = new DataTable();
                int fieldCount = reader.FieldCount;
                for (int fieldIndex = 0; fieldIndex < fieldCount; ++fieldIndex)
                {
                    table.Columns.Add(reader.GetName(fieldIndex), reader.GetFieldType(fieldIndex));
                }

                table.BeginLoadData();

                object[] rowValues = new object[fieldCount];
                while (reader.Read())
                {
                    reader.GetValues(rowValues);
                    table.LoadDataRow(rowValues, true);
                }
                reader.Close();
                table.EndLoadData();

                return table;

            }
            catch (Exception ex)
            {
                throw new Exception("DataReader转换为DataTable时出错!", ex);
            }
        }
コード例 #2
0
ファイル: DBReader.cs プロジェクト: fjiang2/sqlcon
        public static DataTable CreateTable(DbDataReader reader)
        {
            DataTable table = new DataTable();
            for (int i = 0; i < reader.FieldCount; i++)
            {
                DataColumn column = new DataColumn(reader.GetName(i), reader.GetFieldType(i));
                table.Columns.Add(column);
            }

            table.AcceptChanges();

            return table;
        }
コード例 #3
0
 static int GetFieldType(IntPtr L)
 {
     try
     {
         ToLua.CheckArgsCount(L, 2);
         System.Data.Common.DbDataReader obj = (System.Data.Common.DbDataReader)ToLua.CheckObject(L, 1, typeof(System.Data.Common.DbDataReader));
         int         arg0 = (int)LuaDLL.luaL_checknumber(L, 2);
         System.Type o    = obj.GetFieldType(arg0);
         ToLua.Push(L, o);
         return(1);
     }
     catch (Exception e)
     {
         return(LuaDLL.toluaL_exception(L, e));
     }
 }
コード例 #4
0
        public void WriteColumns2File(DbDataReader reader, string file)
        {
            if (reader == null)
                return;

            using (System.IO.StreamWriter writer = new System.IO.StreamWriter(file))
            {
                for (int i = 0; i < reader.VisibleFieldCount; i++)
                {
                    string index = (i + 1).ToString("D2");
                    string columnName = reader.GetName(i).ToUpper();
                    string type = reader.GetFieldType(i).Name;
                    string comment = "说明";
                    writer.WriteLine(string.Format("{0}\t|\t{1}\t|\t{2}\t|\t{3}", index, columnName, type, comment));
                }
            }
        }
コード例 #5
0
ファイル: ManagedSpatiaLite.cs プロジェクト: lishxi/_SharpMap
 private FeatureDataTable CreateTableFromReader(DbDataReader reader, int geomIndex)
 {
     var res = new FeatureDataTable {TableName = Table};
     for (var c = 0; c < geomIndex; c++)
     {
         var fieldType = reader.GetFieldType(c);
         if (fieldType == null)
             throw new Exception("Unable to retrieve field type for column " + c);
         res.Columns.Add(DequoteIdentifier(reader.GetName(c)), fieldType);
     }
     return res;
 }
コード例 #6
0
ファイル: CachingCommand.cs プロジェクト: ahmelsayed/efcache
        private static ColumnMetadata[] GetTableMetadata(DbDataReader reader)
        {
            var columnMetadata = new ColumnMetadata[reader.FieldCount];

            for (var i = 0; i < reader.FieldCount; i++)
            {
                columnMetadata[i] =
                    new ColumnMetadata(
                        reader.GetName(i), reader.GetDataTypeName(i), reader.GetFieldType(i));
            }

            return columnMetadata;
        }
コード例 #7
0
        public override bool BulkInsert(string schemaName, string tableName, DbDataReader reader, Action<long> callback)
        {
            // Read the first row to get the information on the schema

            if (reader.Read()) {

                var existingTable = GetDbSchema(schemaName, tableName);
                var readerTable = new DbTable(tableName, schemaName);

                var pgTypes = new List<NpgsqlDbType>();
                for (var i = 0; i < reader.FieldCount; i++) {
                    var columnName = reader.GetName(i);
                    var columnType = reader.GetFieldType(i);

                    var column = new DbColumn(columnName, MungType.Get(columnType));
                    readerTable.Columns.Add(column);

                    var type = PostgresqlTypeConverter.Get(column.MungType);

                    if (type == null) {
                        throw new Exception($"Unable to load Postgres type for type: {column.MungType.Code}, Column: {column.ColumnName}");
                    }
                    pgTypes.Add(type.PostgresqlDbType);
                }
                if (existingTable == null) {
                    CreateTable(readerTable);
                } else {
                    ModifySchema(existingTable, readerTable);
                }

                var table = GetDbSchema(schemaName, tableName);

                var rowCount = 0L;
                using (var cn = _connectionFactory()) {
                    using (var writer = cn.BeginBinaryImport(CopyCommand(table))) {
                        do {

                            writer.StartRow();
                            for (var i = 0; i < table.Columns.Count; i++) {
                                var col = table.Columns[i];
                                var val = reader[col.ColumnName];
                                if (val == DBNull.Value) {
                                    writer.WriteNull();
                                } else {
                                    writer.Write(reader[col.ColumnName], pgTypes[i]);
                                }
                            }
                            if (callback != null) {
                                callback(rowCount);
                            }
                            rowCount++;

                        } while (reader.Read());
                    }
                }

            }
            return true;
        }
コード例 #8
0
ファイル: PropertyMapper.cs プロジェクト: joonhwan/NPoco
        private IEnumerable<MapPlan> BuildMapPlans(GroupResult<PosName> groupedName, DbDataReader dataReader, PocoData pocoData, List<PocoMember> pocoMembers)
        {
            // find pocomember by property name
            var pocoMember = pocoMembers.FirstOrDefault(x => IsEqual(groupedName.Item, x.Name));

            if (pocoMember == null)
            {
                yield break;
            }

            if (groupedName.SubItems.Any())
            {
                var memberInfoType = pocoMember.MemberInfoData.MemberType;
                if (memberInfoType.IsAClass() || pocoMember.IsDynamic)
                {
                    var children = PocoDataBuilder.IsDictionaryType(memberInfoType)
                        ? CreateDynamicDictionaryPocoMembers(groupedName.SubItems, pocoData)
                        : pocoMember.PocoMemberChildren;

                    var subPlans = groupedName.SubItems.SelectMany(x => BuildMapPlans(x, dataReader, pocoData, children)).ToArray();

                    yield return (reader, instance) =>
                    {
                        var newObject = pocoMember.IsList ? pocoMember.Create(dataReader) : (pocoMember.GetValue(instance) ?? pocoMember.Create(dataReader));

                        var shouldSetNestedObject = false;
                        foreach (var subPlan in subPlans)
                        {
                            shouldSetNestedObject |= subPlan(reader, newObject);
                        }

                        if (shouldSetNestedObject)
                        {
                            if (pocoMember.IsList)
                            {
                                var list = pocoMember.CreateList();
                                list.Add(newObject);
                                newObject = list;
                            }

                            pocoMember.SetValue(instance, newObject);
                            return true;
                        }
                        return false;
                    };
                }
            }
            else
            {
                var destType = pocoMember.MemberInfoData.MemberType;
                var defaultValue = MappingHelper.GetDefault(destType);
                var converter = GetConverter(pocoData, pocoMember.PocoColumn, dataReader.GetFieldType(groupedName.Key.Pos), destType);
                yield return (reader, instance) => MapValue(groupedName, reader, converter, instance, pocoMember.PocoColumn, defaultValue);
            }
        }
コード例 #9
0
        public override bool BulkInsert(string schemaName, string tableName, DbDataReader reader, Action<long> eachRow)
        {
            using (var cn = _connectionFactory()) {
                using (SqlBulkCopy copy = new SqlBulkCopy(cn)) {

                    var existingTable = GetDbSchema(schemaName, tableName);
                    var readerTable = new DbTable(tableName, schemaName);

                    for (var i = 0; i < reader.FieldCount; i++) {
                        var columnName = reader.GetName(i);
                        var columnType = reader.GetFieldType(i);

                        var column = new DbColumn(columnName, MungType.Get(columnType));
                        readerTable.Columns.Add(column);
                    }

                    if (existingTable == null) {
                        CreateTable(readerTable);
                    }

                    var table = GetDbSchema(schemaName, tableName);

                    for (var i = 0; i < reader.FieldCount; i++) {
                        var column = reader.GetName(i);
                        var sourceOrdinal = i;
                        var destinationOrdinal = table.Columns.FindIndex(x => x.ColumnName == column);

                        if (destinationOrdinal == -1) {
                            var msg = string.Format("Unable to resolve column mapping, column: {0} was not found in destination table {1}",
                                column,
                                table.TableName
                            );
                            throw new Exception(msg);
                        }
                        copy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(i, destinationOrdinal));
                    }

                    copy.DestinationTableName = string.Format("[{0}].[{1}]", table.SchemaName, table.TableName);

                    copy.BatchSize = 1000;
                    copy.NotifyAfter = 1;
                    copy.SqlRowsCopied += (sender, e) => {
                        eachRow(e.RowsCopied);
                    };
                    copy.BulkCopyTimeout = 9999999;

                    copy.WriteToServer(reader);
                }

            }
            return true;
        }
コード例 #10
0
ファイル: Json.cs プロジェクト: honj51/ideacode
    /// <summary>
    /// DataReader转换为Json
    /// </summary>
    /// <param name="dataReader">DataReader对象</param>
    /// <returns>Json字符串</returns>
    public static string ToJson(DbDataReader dataReader)
    {
        string jsonString = "[";
        while (dataReader.Read())
        {
            jsonString += "{";

            for (int i = 0; i < dataReader.FieldCount; i++)
            {
                jsonString += "\"" + ToJson(dataReader.GetName(i)) + "\":";
                Type type = dataReader.GetFieldType(i);
                if (type == typeof(DateTime))
                {
                    if (!dataReader.IsDBNull(i))
                    {
                        DateTime dt = dataReader.GetDateTime(i);
                        jsonString += "\"" + ToJson(dt.ToString("yyyy-MM-dd HH:mm:ss")) + "\",";
                    }
                    else
                    {
                        jsonString += "\"\",";
                    }
                }
                else if (type == typeof(string))
                {
                    jsonString += "\"" + ToJson(dataReader[i].ToString()) + "\",";
                }
                else if (type == typeof(Int32) || type == typeof(Int64) || type == typeof(Double) || type == typeof(Decimal))
                {
                    if (!dataReader.IsDBNull(i))
                    {
                        jsonString += ToJson(dataReader[i].ToString()) + ",";
                    }
                    else
                    {
                        jsonString += "\"\",";
                    }
                }
                else
                {
                    throw new Exception("未知类型:" + type.ToString());
                    //jsonString += ToJson(dataReader[i].ToString()) + ",";
                }
            }
            jsonString = DeleteLast(jsonString) + "},";
        }
        dataReader.Close();
        return DeleteLast(jsonString) + "]";
    }
コード例 #11
0
ファイル: ValueTypeMapper.cs プロジェクト: joonhwan/NPoco
 public override void Init(DbDataReader dataReader, PocoData pocoData)
 {
     _converter = GetConverter(pocoData, null, dataReader.GetFieldType(0), pocoData.Type) ?? (x => x);
     base.Init(dataReader, pocoData);
 }
コード例 #12
0
        private static Entity GetSchemaEntity(DbDataReader reader, string entitySet, string entityKind)
        {
            reader.Read();

            var entity = new Entity();
            entity.AddProperty(DataLoaderConstants.PropNameEntitySet, entitySet);
            entity.AddProperty(DataLoaderConstants.PropNameEntityKind, entityKind);
            for (int i = 0; i < reader.FieldCount; ++i)
            {
                entity.AddProperty(reader.GetName(i), reader.GetFieldType(i).ToString());
            }

            return entity;
        }
コード例 #13
0
 private static void HandleDbNullValues(DbDataReader reader, 
     object targetObject, 
     PropertyInfo propertyInfo,
     string fieldName)
 {
     var propertyType = propertyInfo.PropertyType;
     var isNullable = (Nullable.GetUnderlyingType(propertyType) != null);
     if (isNullable)
     {
         propertyInfo.SetValue(targetObject, null, null);
     }
     else
     {
         Type targetObjectType = reader.GetFieldType(fieldName);
         throw new NullableFieldTypeException(fieldName, propertyType, targetObjectType);
     }
 }
コード例 #14
0
ファイル: SqliteHelper.cs プロジェクト: zhang5171291/TestCode
        /// <summary>
        /// DataReader 转 List
        /// </summary>
        /// <param name="dataReader"></param>
        /// <returns></returns>
        public List<Dictionary<string, dynamic>> ConvertDataReaderToDictList(DbDataReader dataReader)
        {
            var result = new List<Dictionary<string, dynamic>>();

            if (dataReader != null && dataReader.HasRows)
            {
                while (dataReader.Read())
                {
                    var dict = new Dictionary<string, dynamic>();

                    for (var i = 0; i < dataReader.FieldCount; i++)
                    {
                        try
                        {
                            var key = dataReader.GetName(i);
                            var val = Convert.ChangeType(dataReader[i], dataReader.GetFieldType(i));
                            if (!string.IsNullOrWhiteSpace(key))
                                dict.Add(key, val);
                        }
                        catch
                        {
                        }
                    }
                    result.Add(dict);
                }
            }

            return result;
        }