public static IEnumerable <PSObject> Translate(System.Data.Common.DbDataReader dataReader, Boolean ProviderTypes) { List <Map> MapList = new List <Map>(); int Ord = 0; foreach (var x in dataReader.GetSchemaTable().Select("", "ColumnOrdinal")) { MapList.Add(new Map(Ord, x["DataType"].ToString(), x["ColumnName"].ToString())); // x("AllowDBNull"), Ord += 1; } PSObject responseObject = new PSObject(); while (dataReader.Read()) { PSObject psObj = new PSObject(); foreach (Map m in MapList) { { var withBlock = psObj.Members; if (dataReader.IsDBNull(m.Ordinal)) { withBlock.Add(new PSNoteProperty(m.Name, null), true); } else { try { if (ProviderTypes) { withBlock.Add(new PSNoteProperty(m.Name, dataReader.GetProviderSpecificValue(m.Ordinal)), true); } else { withBlock.Add(new PSNoteProperty(m.Name, dataReader.GetValue(m.Ordinal)), true); } } catch (Exception ex) { string msg = string.Format("Failed to translate, ColumnName = {0} | ColumnOrdinal = {1} | ColumnType = {2} | ToStringValue = '{3}' | See InnerException for details", m.Name, m.Ordinal, m.DataType, dataReader.GetValue(m.Ordinal).ToString()); throw new Exception(msg, ex); } } } } yield return(psObj); } }
static int GetProviderSpecificValue(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); object o = obj.GetProviderSpecificValue(arg0); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }