This is something I use from time to time, and I thought I’d post it here so I can more easily find it next time I need the code.
This is an IDataReader implementation that reads in comma-separated value files. Probably incomplete, but it works well in the scenarios where I’ve needed it.
using System;using System.Data;using System.IO; namespace Csla.Data{ public class CsvDataReader : IDataReader, IDisposable { private StreamReader _file; private string[] _headers; private string[] _line; public CsvDataReader(string filePath) { _file = File.OpenText(filePath); Read(); _headers = _line; } public void Close() { _file.Close(); _file.Dispose(); _file = null; } public int Depth { get { throw new NotImplementedException(); } } public DataTable GetSchemaTable() { throw new NotImplementedException(); } public bool IsClosed { get { return _file == null; } } public bool NextResult() { return false; } public bool Read() { var result = !_file.EndOfStream; if (result) _line = _file.ReadLine().Split(','); return result; } public int RecordsAffected { get { throw new NotImplementedException(); } } public void Dispose() { if (_file != null) { _file.Dispose(); _file = null; } } public int FieldCount { get { return _headers.Length; } } public bool GetBoolean(int i) { return Boolean.Parse(_line[i]); } public byte GetByte(int i) { return Byte.Parse(_line[i]); } public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length) { throw new NotImplementedException(); } public char GetChar(int i) { return Char.Parse(_line[i]); } public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length) { throw new NotImplementedException(); } public IDataReader GetData(int i) { throw new NotImplementedException(); } public string GetDataTypeName(int i) { throw new NotImplementedException(); } public DateTime GetDateTime(int i) { return DateTime.Parse(_line[i]); } public decimal GetDecimal(int i) { return Decimal.Parse(_line[i]); } public double GetDouble(int i) { return Double.Parse(_line[i]); } public Type GetFieldType(int i) { throw new NotImplementedException(); } public float GetFloat(int i) { return float.Parse(_line[i]); } public Guid GetGuid(int i) { return Guid.Parse(_line[i]); } public short GetInt16(int i) { return Int16.Parse(_line[i]); } public int GetInt32(int i) { return Int32.Parse(_line[i]); } public long GetInt64(int i) { return Int64.Parse(_line[i]); } public string GetName(int i) { return _headers[i]; } public int GetOrdinal(string name) { int result = -1; for (int i = 0; i < _headers.Length; i++) if (_headers[i] == name) { result = i; break; } return result; } public string GetString(int i) { return _line[i]; } public object GetValue(int i) { return _line[i]; } public int GetValues(object[] values) { throw new NotImplementedException(); } public bool IsDBNull(int i) { return string.IsNullOrWhiteSpace(_line[i]); } public object this[string name] { get { return _line[GetOrdinal(name)]; } } public object this[int i] { get { return GetValue(i); } } }}
Powered by: newtelligence dasBlog 2.0.7226.0
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2013, Marimer LLC
E-mail