示例#1
0
    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);
        }
    }
示例#2
0
 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));
     }
 }