在网上找到一个从recordset导出到excel的例子,速度尚可。但我的dataset怎样转换成recordset? m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);

解决方案 »

  1.   

    static public ADODB.Recordset ConvertToRecordset(DataTable inTable)
    {
    ADODB.Recordset result = new ADODB.Recordset();
    result.CursorLocation = ADODB.CursorLocationEnum.adUseClient; ADODB.Fields resultFields = result.Fields;
    System.Data.DataColumnCollection inColumns = inTable.Columns; foreach (DataColumn inColumn in inColumns)
    {
    resultFields.Append(inColumn.ColumnName
    , TranslateType(inColumn.DataType)
    , inColumn.MaxLength
    , inColumn.AllowDBNull ? ADODB.FieldAttributeEnum.adFldIsNullable : 
    ADODB.FieldAttributeEnum.adFldUnspecified
    , null);
    } result.Open(System.Reflection.Missing.Value
    , System.Reflection.Missing.Value
    , ADODB.CursorTypeEnum.adOpenStatic
    , ADODB.LockTypeEnum.adLockOptimistic, 0); foreach (DataRow dr in inTable.Rows)
    {
    result.AddNew(System.Reflection.Missing.Value, 
    System.Reflection.Missing.Value); for (int columnIndex = 0; columnIndex < inColumns.Count; columnIndex++)
    {
    resultFields[columnIndex].Value = dr[columnIndex];
    }
    } return result;
    }

    static ADODB.DataTypeEnum TranslateType(Type columnType)
    {
    switch (columnType.UnderlyingSystemType.ToString())
    {
    case "System.Boolean":
    return ADODB.DataTypeEnum.adBoolean; case "System.Byte":
    return ADODB.DataTypeEnum.adUnsignedTinyInt; case "System.Char":
    return ADODB.DataTypeEnum.adChar; case "System.DateTime":
    return ADODB.DataTypeEnum.adDate; case "System.Decimal":
    return ADODB.DataTypeEnum.adCurrency; case "System.Double":
    return ADODB.DataTypeEnum.adDouble; case "System.Int16":
    return ADODB.DataTypeEnum.adSmallInt; case "System.Int32":
    return ADODB.DataTypeEnum.adInteger; case "System.Int64":
    return ADODB.DataTypeEnum.adBigInt; case "System.SByte":
    return ADODB.DataTypeEnum.adTinyInt; case "System.Single":
    return ADODB.DataTypeEnum.adSingle; case "System.UInt16":
    return ADODB.DataTypeEnum.adUnsignedSmallInt; case "System.UInt32":
    return ADODB.DataTypeEnum.adUnsignedInt; case "System.UInt64":
    return ADODB.DataTypeEnum.adUnsignedBigInt; case "System.String":
    default:
    return ADODB.DataTypeEnum.adVarChar;
    }
    }
      

  2.   

    楼主把从recordset导出到excel的例子给我发一下被~~  谢谢~`
    [email protected]