private object DeserializeQueuedEvent(SqlDataReader result)
 {
     var eventTypeIdColumnId = result.GetOrdinal("EventTypeId");
     var eventDataColumnId = result.GetOrdinal("EventData");
     result.Read();
     var eventTypeId = result.GetSqlGuid(eventTypeIdColumnId).Value;
     return this.serializationMethod.Deserialize(new XmlSerializedData(eventTypeId, result.GetSqlXml(eventDataColumnId).CreateReader()));
 }
 /// <summary>
 /// Constructs an instance of IStoreLogEntry using parts of a row from SqlDataReader.
 /// Used for creating the store operation for Undo.
 /// </summary>
 /// <param name="reader">SqlDataReader whose row has operation information.</param>
 /// <param name="offset">Reader offset for column that begins operation information.</param>
 internal SqlLogEntry(SqlDataReader reader, int offset)
 {
     this.Id = reader.GetGuid(offset);
     this.OpCode = (StoreOperationCode)reader.GetInt32(offset + 1);
     this.Data = reader.GetSqlXml(offset + 2);
     this.UndoStartState = (StoreOperationState)reader.GetInt32(offset + 3);
     SqlGuid shardIdRemoves;
     shardIdRemoves = reader.GetSqlGuid(offset + 4);
     this.OriginalShardVersionRemoves = shardIdRemoves.IsNull ? default(Guid) : shardIdRemoves.Value;
     SqlGuid shardIdAdds;
     shardIdAdds = reader.GetSqlGuid(offset + 5);
     this.OriginalShardVersionAdds = shardIdAdds.IsNull ? default(Guid) : shardIdAdds.Value;
 }
        private EventStream DeserializeEvents(Guid id, SqlDataReader result)
        {
            var lastVersion = 0;
            var snapshotVersion = 0;
            var eventTypeIdColumnId = result.GetOrdinal("EventTypeId");
            var eventDataColumnId = result.GetOrdinal("EventData");
            var versionColumnId = result.GetOrdinal("Version");
            var snapshotVersionColumnId = result.GetOrdinal("SnapshotVersion");
            var events = new List<object>();
            while (result.Read())
            {
                var eventTypeId = result.GetSqlGuid(eventTypeIdColumnId).Value;
                lastVersion = result.GetSqlInt32(versionColumnId).Value;
                snapshotVersion = result.GetSqlInt32(snapshotVersionColumnId).Value;
                events.Add(this.serializationMethod.Deserialize(new XmlSerializedData(eventTypeId, result.GetSqlXml(eventDataColumnId).CreateReader())));
            }

            return new EventStream(id, lastVersion, snapshotVersion, events);
        }
Example #4
0
 public virtual void AddItemsToListBySqlDataReader(System.Data.SqlClient.SqlDataReader reader)
 {
     DotNetNancy.Rules.RuleSet.DataAccess.DTO.ConfigurationFile dto;
     using (reader)
     {
         while (reader.Read())
         {
             dto = new DotNetNancy.Rules.RuleSet.DataAccess.DTO.ConfigurationFile();
             dto.ConfigurationFile_Property = new System.Xml.XmlDocument();
             dto.ConfigurationFile_Property.Load(reader.GetSqlXml(reader.GetOrdinal("ConfigurationFile")).CreateReader());
             dto.TypeID =
                 _baseDatabase.retrieveGuidFromDataReader(reader.GetOrdinal("TypeID"), reader);
             dto.ApplicationID =
                 _baseDatabase.retrieveGuidFromDataReader(reader.GetOrdinal("ApplicationID"), reader);
             dto.ConfigurationTypeID =
                 _baseDatabase.resolveNullInt32(reader.GetOrdinal("ConfigurationTypeID"), reader);
             this.Add(dto);
         }
     }
 }
Example #5
0
        public virtual void AddItemsToListBySqlDataReader(System.Data.SqlClient.SqlDataReader reader)
        {
            DTO.RuleDefinition dto;
            using (reader)
            {
                while (reader.Read())
                {
                    dto          = new DTO.RuleDefinition();
                    dto.RuleName =
                        _baseDatabase.resolveNullString(reader.GetOrdinal("RuleName"), reader);

                    dto.Definition = new System.Xml.XmlDocument();

                    dto.Definition.Load(reader.GetSqlXml(reader.GetOrdinal("Definition")).CreateReader());
                    dto.Paused =
                        _baseDatabase.resolveNullBoolean(reader.GetOrdinal("Paused"), reader);
                    dto.DateCreated =
                        _baseDatabase.resolveNullDateTime(reader.GetOrdinal("DateCreated"), reader);
                    dto.CreatedBy =
                        _baseDatabase.retrieveGuidFromDataReader(reader.GetOrdinal("CreatedBy"), reader);
                    dto.Deleted =
                        _baseDatabase.resolveNullBoolean(reader.GetOrdinal("Deleted"), reader);
                    dto.DateUpdated =
                        _baseDatabase.resolveNullDateTime(reader.GetOrdinal("DateUpdated"), reader);
                    dto.UpdatedBy =
                        _baseDatabase.retrieveGuidFromDataReader(reader.GetOrdinal("UpdatedBy"), reader);
                    dto.RuleID =
                        _baseDatabase.retrieveGuidFromDataReader(reader.GetOrdinal("RuleID"), reader);
                    dto.TypeID =
                        _baseDatabase.retrieveGuidFromDataReader(reader.GetOrdinal("TypeID"), reader);
                    dto.ApplicationID =
                        _baseDatabase.retrieveGuidFromDataReader(reader.GetOrdinal("ApplicationID"), reader);
                    this.Add(dto);
                }
            }
        }
Example #6
0
        protected static void PopulateEntity(SqlDataReader reader, ServerEntity entity, Dictionary<string, PropertyInfo> propMap)
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                String columnName = reader.GetName(i);

                // Special case for when we select a range of values with an EntityBroker, just ignore
                if (columnName.Equals("RowNum"))
                    continue;

                if (columnName.Equals("GUID"))
                {
                    Guid uid = reader.GetGuid(i);
                    entity.SetKey(new ServerEntityKey(entity.Name, uid));
                    continue;
                }

                if (columnName.Equals(entity.Name) && columnName.Contains("Enum"))
                    columnName = "Enum";

                PropertyInfo prop;
				
                if (!propMap.TryGetValue(columnName, out prop))
                    throw new EntityNotFoundException("Unable to match column to property: " + columnName, null);

                if (columnName.Contains("GUID"))
                    columnName = columnName.Replace("GUID", "Key");

                if (reader.IsDBNull(i))
                {
                    prop.SetValue(entity, null, null);
                    continue;
                }

                Type propType = prop.PropertyType;
                if (propType == typeof(String))
                    prop.SetValue(entity, reader.GetString(i), null);
                else if (propType == typeof(ServerEntityKey))
                {
                    Guid uid = reader.GetGuid(i);
                    prop.SetValue(entity, new ServerEntityKey(columnName.Replace("Key", String.Empty), uid), null);
                }
                else if (propType == typeof(DateTime))
                    prop.SetValue(entity, reader.GetDateTime(i), null);
                else if (propType == typeof(DateTime?))
                {
                    if (reader.IsDBNull(i))
                    {
                        prop.SetValue(entity, null, null);
                    }
                    else
                    {
                        prop.SetValue(entity, reader.GetDateTime(i), null);
                    }
                    
                }
                else if (propType == typeof(bool))
                    prop.SetValue(entity, reader.GetBoolean(i), null);
                else if (propType == typeof(Int32))
                    prop.SetValue(entity, reader.GetInt32(i), null);
                else if (propType == typeof(Int16))
                    prop.SetValue(entity, reader.GetInt16(i), null);
                else if (propType == typeof(double))
                    prop.SetValue(entity, reader.GetDouble(i), null);
                else if (propType == typeof(Decimal))
                    prop.SetValue(entity, reader.GetDecimal(i), null);
                else if (propType == typeof(float))
                    prop.SetValue(entity, reader.GetFloat(i), null);
                else if (propType == typeof(XmlDocument))
                {
                    SqlXml xml = reader.GetSqlXml(i);
                    if (xml!=null && !xml.IsNull)
                    {
                        XmlReader xmlReader = xml.CreateReader();
                        if (xmlReader != null)
                        {
                            XmlDocument xmlDoc = new XmlDocument();
                            xmlDoc.Load(xmlReader);
                            prop.SetValue(entity, xmlDoc, null);
                        }
                        else
                            prop.SetValue(entity, null, null);
                    }
                    else
                    {
                        prop.SetValue(entity, null, null);
                    }
                }
                else if (typeof(ServerEnum).IsAssignableFrom(propType))
                {
                    short enumVal = reader.GetInt16(i);
                    ConstructorInfo construct = prop.PropertyType.GetConstructor(new Type[0]);
                    ServerEnum val = (ServerEnum)construct.Invoke(null);
                    val.SetEnum(enumVal);
                    prop.SetValue(entity, val, null);
                }
                else
                    throw new EntityNotFoundException("Unsupported property type: " + propType, null);
            }
        }
Example #7
0
        // Copy multiple fields from reader to ITypedSettersV3
        //  Assumes caller enforces that reader and setter metadata are compatible
        internal static void FillCompatibleITypedSettersFromReader( SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataReader reader ) {
            for ( int i = 0; i < metaData.Length; i++ ) {
                if ( reader.IsDBNull(i) ) {
                    ValueUtilsSmi.SetDBNull_Unchecked( sink, setters, i );
                }
                else {
                    switch ( metaData[i].SqlDbType ) {
                        case SqlDbType.BigInt:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int64 ) );
                            ValueUtilsSmi.SetInt64_Unchecked( sink, setters, i, reader.GetInt64(i) );
                            break;
                        case SqlDbType.Binary:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) );
                            ValueUtilsSmi.SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 );
                            break;
                        case SqlDbType.Bit:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Boolean ) );
                            SetBoolean_Unchecked( sink, setters, i, reader.GetBoolean(i) );
                            break;
                        case SqlDbType.Char:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) );
                            SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 );
                            break;
                        case SqlDbType.DateTime:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.DateTime ) );
                            SetDateTime_Checked( sink, setters, i, metaData[i], reader.GetDateTime(i) );
                            break;
                        case SqlDbType.Decimal:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlDecimal ) );
                            SetSqlDecimal_Unchecked( sink, setters, i, reader.GetSqlDecimal(i) );
                            break;
                        case SqlDbType.Float:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Double ) );
                            SetDouble_Unchecked( sink, setters, i, reader.GetDouble(i) );
                            break;
                        case SqlDbType.Image:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) );
                            SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 );
                            break;
                        case SqlDbType.Int:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int32 ) );
                            SetInt32_Unchecked( sink, setters, i, reader.GetInt32(i) );
                            break;
                        case SqlDbType.Money:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlMoney ) );
                            SetSqlMoney_Unchecked( sink, setters, i, metaData[i], reader.GetSqlMoney(i) );
                            break;
                        case SqlDbType.NChar:
                        case SqlDbType.NText:
                        case SqlDbType.NVarChar:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) );
                            SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 );
                            break;
                        case SqlDbType.Real:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Single ) );
                            SetSingle_Unchecked( sink, setters, i, reader.GetFloat(i) );
                            break;
                        case SqlDbType.UniqueIdentifier:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Guid ) );
                            SetGuid_Unchecked( sink, setters, i, reader.GetGuid(i) );
                            break;
                        case SqlDbType.SmallDateTime:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.DateTime ) );
                            SetDateTime_Checked( sink, setters, i, metaData[i], reader.GetDateTime(i) );
                            break;
                        case SqlDbType.SmallInt:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Int16 ) );
                            SetInt16_Unchecked( sink, setters, i, reader.GetInt16(i) );
                            break;
                        case SqlDbType.SmallMoney:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlMoney ) );
                            SetSqlMoney_Checked( sink, setters, i, metaData[i], reader.GetSqlMoney(i) );
                            break;
                        case SqlDbType.Text:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlChars ) );
                            SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 );
                            break;
                        case SqlDbType.Timestamp:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) );
                            SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 );
                            break;
                        case SqlDbType.TinyInt:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.Byte ) );
                            SetByte_Unchecked( sink, setters, i, reader.GetByte(i) );
                            break;
                        case SqlDbType.VarBinary:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) );
                            SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 );
                            break;
                        case SqlDbType.VarChar:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.String ) );
                            SetSqlChars_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlChars(i), 0 );
                            break;
                        case SqlDbType.Xml:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlXml ) );
                            SetSqlXml_Unchecked( sink, setters, i, reader.GetSqlXml(i) );
                            break;
                        case SqlDbType.Variant:
                            object o = reader.GetSqlValue(i);
                            ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCode( o );
                            SetCompatibleValue( sink, setters, i, metaData[i], o, typeCode, 0 );
                            break;
                            
                        case SqlDbType.Udt:
                            Debug.Assert( CanAccessSetterDirectly( metaData[i], ExtendedClrTypeCode.SqlBytes ) );
                            SetSqlBytes_LengthChecked( sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0 );
                            break;

                        default:
                            // In order for us to get here we would have to have an 
                            // invalid instance of SqlDbType, or one would have to add 
                            // new member to SqlDbType without adding a case in this 
                            // switch, hence the assert - it must be 

                            Debug.Assert( false, "unsupported DbType:" + metaData[i].SqlDbType.ToString() );
                            throw ADP.NotSupported();
                            
                    }
                }
            }
        }
        private void ProcessNotificationResults(SqlDataReader reader)
        {
            IntPtr hscp;
            Bid.NotificationsScopeEnter(out hscp, "<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> %d#", ObjectID);
            try {
                Guid handle = Guid.Empty; // Conversation_handle.  Always close this!
                try {
                    if (!_stop) {
                        while (reader.Read()) {
                            Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> Row read.\n");
#if DEBUG
                            for (int i=0; i<reader.FieldCount; i++) {
                                Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> column: %ls, value: %ls\n", reader.GetName(i), reader.GetValue(i).ToString());
                            }
#endif
                            string msgType = reader.GetString(0);
                            Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> msgType: '%ls'\n", msgType);
                            handle = reader.GetGuid(1);
//                            Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults(SqlDataReader)|DEP> conversationHandle: '%p(GUID)'\n", conversationHandle);
                            
                            // Only process QueryNotification messages.
                            if (0 == String.Compare(msgType, "http://schemas.microsoft.com/SQL/Notifications/QueryNotification", StringComparison.OrdinalIgnoreCase)) {
                                SqlXml payload = reader.GetSqlXml(2);
                                if (null != payload) {
                                    SqlNotification notification = SqlNotificationParser.ProcessMessage(payload);
                                    if (null != notification) {
                                        string key    = notification.Key;
                                        Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> Key: '%ls'\n", key);
                                        int    index  = key.IndexOf(';'); // Our format is simple: "AppDomainKey;commandHash"

                                        if (index >= 0) { // Ensure ';' present.
                                            string appDomainKey = key.Substring(0, index);
                                            SqlDependencyPerAppDomainDispatcher dispatcher;
                                            lock (_staticInstance._sqlDependencyPerAppDomainDispatchers) {
                                                dispatcher = _staticInstance._sqlDependencyPerAppDomainDispatchers[appDomainKey];
                                            }
                                            if (null != dispatcher) {
                                                try {
                                                    dispatcher.InvalidateCommandID(notification); // CROSS APP-DOMAIN CALL!
                                                }
                                                catch (Exception e) {
                                                    if (!ADP.IsCatchableExceptionType(e)) {
                                                        throw;
                                                    }
                                                    ADP.TraceExceptionWithoutRethrow(e); // Discard failure.  User event could throw exception.
                                                }
                                            }
                                            else {
                                                Debug.Assert(false, "Received notification but do not have an associated PerAppDomainDispatcher!");
                                                Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Received notification but do not have an associated PerAppDomainDispatcher!\n");
                                            }
                                        }
                                        else {
                                            Debug.Assert(false, "Unexpected ID format received!");
                                            Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Unexpected ID format received!\n");
                                        }                        
                                    }
                                    else {
                                        Debug.Assert(false, "Null notification returned from ProcessMessage!");
                                        Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Null notification returned from ProcessMessage!\n");
                                    }                        
                                }
                                else {
                                    Debug.Assert(false, "Null payload for QN notification type!");
                                    Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Null payload for QN notification type!\n");
                                }
                            }
                            else {
                                handle = Guid.Empty;
                                // VSDD 546707: this assert was hit by SQL Notification fuzzing tests, disable it to let these tests run on Debug bits
                                // Debug.Assert(false, "Unexpected message format received!");
                                Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> Unexpected message format received!\n");
                            }
                        }
                    }
                }
                finally {
                    // Since we do not want to make a separate round trip just for the end conversation call, we need to
                    // batch it with the next command.  
                    if (handle == Guid.Empty) { // This should only happen if failure occurred, or if non-QN format received.
                        _com.CommandText = (null != _beginConversationQuery) ? _beginConversationQuery : _receiveQuery; // If we're doing the initial query, we won't have a conversation Guid to begin yet.
                        if (_com.Parameters.Count > 1) { // Remove conversation param since next execute is only query.
                            _com.Parameters.Remove(_conversationGuidParam);
                        }
                        Debug.Assert(_com.Parameters.Count == 1, "Unexpected number of parameters!");
                    }
                    else {
                        _com.CommandText = _concatQuery; // END query + WAITFOR RECEIVE query.
                        _conversationGuidParam.Value = handle; // Set value for conversation handle.
                        if (_com.Parameters.Count == 1) { // Add parameter if previous execute was only query.
                            _com.Parameters.Add(_conversationGuidParam);
                        }
                        Debug.Assert(_com.Parameters.Count == 2, "Unexpected number of parameters!");
                    }
                }
            }
            finally {
                Bid.ScopeLeave(ref hscp);
            }
        }
 internal static void FillCompatibleITypedSettersFromReader(SmiEventSink_Default sink, ITypedSettersV3 setters, SmiMetaData[] metaData, SqlDataReader reader)
 {
     for (int i = 0; i < metaData.Length; i++)
     {
         if (reader.IsDBNull(i))
         {
             SetDBNull_Unchecked(sink, setters, i);
             continue;
         }
         switch (metaData[i].SqlDbType)
         {
             case SqlDbType.BigInt:
             {
                 SetInt64_Unchecked(sink, setters, i, reader.GetInt64(i));
                 continue;
             }
             case SqlDbType.Binary:
             {
                 SetSqlBytes_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0);
                 continue;
             }
             case SqlDbType.Bit:
             {
                 SetBoolean_Unchecked(sink, setters, i, reader.GetBoolean(i));
                 continue;
             }
             case SqlDbType.Char:
             {
                 SetSqlChars_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlChars(i), 0);
                 continue;
             }
             case SqlDbType.DateTime:
             {
                 SetDateTime_Checked(sink, setters, i, metaData[i], reader.GetDateTime(i));
                 continue;
             }
             case SqlDbType.Decimal:
             {
                 SetSqlDecimal_Unchecked(sink, setters, i, reader.GetSqlDecimal(i));
                 continue;
             }
             case SqlDbType.Float:
             {
                 SetDouble_Unchecked(sink, setters, i, reader.GetDouble(i));
                 continue;
             }
             case SqlDbType.Image:
             {
                 SetSqlBytes_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0);
                 continue;
             }
             case SqlDbType.Int:
             {
                 SetInt32_Unchecked(sink, setters, i, reader.GetInt32(i));
                 continue;
             }
             case SqlDbType.Money:
             {
                 SetSqlMoney_Unchecked(sink, setters, i, metaData[i], reader.GetSqlMoney(i));
                 continue;
             }
             case SqlDbType.NChar:
             case SqlDbType.NText:
             case SqlDbType.NVarChar:
             {
                 SetSqlChars_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlChars(i), 0);
                 continue;
             }
             case SqlDbType.Real:
             {
                 SetSingle_Unchecked(sink, setters, i, reader.GetFloat(i));
                 continue;
             }
             case SqlDbType.UniqueIdentifier:
             {
                 SetGuid_Unchecked(sink, setters, i, reader.GetGuid(i));
                 continue;
             }
             case SqlDbType.SmallDateTime:
             {
                 SetDateTime_Checked(sink, setters, i, metaData[i], reader.GetDateTime(i));
                 continue;
             }
             case SqlDbType.SmallInt:
             {
                 SetInt16_Unchecked(sink, setters, i, reader.GetInt16(i));
                 continue;
             }
             case SqlDbType.SmallMoney:
             {
                 SetSqlMoney_Checked(sink, setters, i, metaData[i], reader.GetSqlMoney(i));
                 continue;
             }
             case SqlDbType.Text:
             {
                 SetSqlChars_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlChars(i), 0);
                 continue;
             }
             case SqlDbType.Timestamp:
             {
                 SetSqlBytes_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0);
                 continue;
             }
             case SqlDbType.TinyInt:
             {
                 SetByte_Unchecked(sink, setters, i, reader.GetByte(i));
                 continue;
             }
             case SqlDbType.VarBinary:
             {
                 SetSqlBytes_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0);
                 continue;
             }
             case SqlDbType.VarChar:
             {
                 SetSqlChars_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlChars(i), 0);
                 continue;
             }
             case SqlDbType.Variant:
             {
                 object sqlValue = reader.GetSqlValue(i);
                 ExtendedClrTypeCode typeCode = MetaDataUtilsSmi.DetermineExtendedTypeCode(sqlValue);
                 SetCompatibleValue(sink, setters, i, metaData[i], sqlValue, typeCode, 0);
                 continue;
             }
             case SqlDbType.Xml:
             {
                 SetSqlXml_Unchecked(sink, setters, i, reader.GetSqlXml(i));
                 continue;
             }
             case SqlDbType.Udt:
             {
                 SetSqlBytes_LengthChecked(sink, setters, i, metaData[i], reader.GetSqlBytes(i), 0);
                 continue;
             }
         }
         throw ADP.NotSupported();
     }
 }
Example #10
0
        private static XmlDocument getXmlRecords(string connection, XmlDocument searchIds, string contentType, DeletedOptions deleted)
        {
            if (connection == null || connection.Length <= 0)
            {
                throw new Exception("missing or invalid connection string");
            }
            if (searchIds == null)
            {
                throw new Exception("missing or invalid searchIds Xml");
            }
            if (contentType.Length <= 0)
            {
                throw new Exception("contentType must be specified");
            }

            XmlDocument xdOutput = new XmlDocument {
                XmlResolver = null
            };
            string rootNode = contentType + "s";

            // no IDs, so save time by aborting now
            if (!searchIds.DocumentElement.HasChildNodes)
            {
                xdOutput.LoadXml(string.Format("<{0}/>", rootNode));
                return(xdOutput);
            }

            try
            {
                StringBuilder sbXml = new StringBuilder();

                using (SqlCommand oCmd = new SqlCommand("getXmlRecords", new SqlConnection(connection)))
                {
                    oCmd.CommandType = CommandType.StoredProcedure;

                    using (XmlNodeReader xnr = new XmlNodeReader(searchIds))
                    {
                        SqlXml sx = new SqlXml(xnr);

                        oCmd.Parameters.Add("@ids", SqlDbType.Xml);
                        oCmd.Parameters["@ids"].Value = sx;
                    }

                    oCmd.Parameters.AddWithValue("@contentType", contentType);
                    oCmd.Parameters.AddWithValue("@version", null);
                    oCmd.Parameters.AddWithValue("@deleted", deleted);

                    oCmd.Connection.Open();

                    System.Data.SqlClient.SqlDataReader oRdr = oCmd.ExecuteReader();

                    if (!oRdr.HasRows)
                    {
                        sbXml.Append("<" + rootNode + "/>");
                    }
                    else
                    {
                        sbXml.Append("<" + rootNode + ">");
                        while (oRdr.Read())
                        {
                            System.Data.SqlTypes.SqlXml sx = oRdr.GetSqlXml(0);
                            //XmlReader xr = sx.CreateReader();
                            //xr.Read();

                            sbXml.Append(sx.Value);
                        }
                        sbXml.Append("</" + rootNode + ">");

                        oRdr.Close();
                        oCmd.Connection.Close();
                    }
                }

                xdOutput.LoadXml(sbXml.ToString());

                return(xdOutput);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Example #11
0
        private static XmlDocument getXmlRecord(string connection, string keyId, string contentType, DeletedOptions deleted)
        {
            if (connection.Length <= 0)
            {
                throw new Exception("missing or invalid connection string");
            }
            if (keyId.Length <= 0)
            {
                throw new Exception("missing or invalid keyID");
            }
            if (contentType.Length <= 0)
            {
                throw new Exception("contentType must be specified");
            }

            try
            {
                XmlDocument xdOutput = new XmlDocument {
                    XmlResolver = null
                };
                StringBuilder sb = new StringBuilder();

                using (SqlCommand oCmd = new SqlCommand("getXmlRecord", new SqlConnection(connection)))
                {
                    oCmd.CommandType = CommandType.StoredProcedure;

                    oCmd.Parameters.AddWithValue("@id", keyId);
                    oCmd.Parameters.AddWithValue("@contentType", contentType);
                    oCmd.Parameters.AddWithValue("@deleted", deleted);

                    oCmd.Connection.Open();

                    System.Data.SqlClient.SqlDataReader oRdr = oCmd.ExecuteReader();



                    if (!oRdr.HasRows)
                    {
                        return(null);
                    }

                    while (oRdr.Read())
                    {
                        System.Data.SqlTypes.SqlXml sx = oRdr.GetSqlXml(0);
                        //XmlReader xr = sx.CreateReader();
                        //xr.Read();

                        sb.Append(sx.Value);
                    }


                    oRdr.Close();
                    oCmd.Connection.Close();
                }

                xdOutput.LoadXml(sb.ToString());

                return(xdOutput);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 private void ProcessNotificationResults(SqlDataReader reader)
 {
     IntPtr ptr;
     Bid.NotificationsScopeEnter(out ptr, "<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> %d#", this.ObjectID);
     try
     {
         Guid empty = Guid.Empty;
         try
         {
             if (!this._stop)
             {
                 while (reader.Read())
                 {
                     Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> Row read.\n");
                     string str2 = reader.GetString(0);
                     Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> msgType: '%ls'\n", str2);
                     empty = reader.GetGuid(1);
                     if (string.Compare(str2, "http://schemas.microsoft.com/SQL/Notifications/QueryNotification", StringComparison.OrdinalIgnoreCase) == 0)
                     {
                         SqlXml sqlXml = reader.GetSqlXml(2);
                         if (sqlXml != null)
                         {
                             SqlNotification sqlNotification = SqlDependencyProcessDispatcher.SqlNotificationParser.ProcessMessage(sqlXml);
                             if (sqlNotification != null)
                             {
                                 string key = sqlNotification.Key;
                                 Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> Key: '%ls'\n", key);
                                 int index = key.IndexOf(';');
                                 if (index >= 0)
                                 {
                                     SqlDependencyPerAppDomainDispatcher dispatcher;
                                     string str3 = key.Substring(0, index);
                                     lock (SqlDependencyProcessDispatcher._staticInstance._sqlDependencyPerAppDomainDispatchers)
                                     {
                                         dispatcher = SqlDependencyProcessDispatcher._staticInstance._sqlDependencyPerAppDomainDispatchers[str3];
                                     }
                                     if (dispatcher != null)
                                     {
                                         try
                                         {
                                             dispatcher.InvalidateCommandID(sqlNotification);
                                             continue;
                                         }
                                         catch (Exception exception)
                                         {
                                             if (!ADP.IsCatchableExceptionType(exception))
                                             {
                                                 throw;
                                             }
                                             ADP.TraceExceptionWithoutRethrow(exception);
                                             continue;
                                         }
                                     }
                                     Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Received notification but do not have an associated PerAppDomainDispatcher!\n");
                                 }
                                 else
                                 {
                                     Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Unexpected ID format received!\n");
                                 }
                             }
                             else
                             {
                                 Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Null notification returned from ProcessMessage!\n");
                             }
                         }
                         else
                         {
                             Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP|ERR> Null payload for QN notification type!\n");
                         }
                     }
                     else
                     {
                         empty = Guid.Empty;
                         Bid.NotificationsTrace("<sc.SqlConnectionContainer.ProcessNotificationResults|DEP> Unexpected message format received!\n");
                     }
                 }
             }
         }
         finally
         {
             if (empty == Guid.Empty)
             {
                 this._com.CommandText = (this._beginConversationQuery != null) ? this._beginConversationQuery : this._receiveQuery;
                 if (this._com.Parameters.Count > 1)
                 {
                     this._com.Parameters.Remove(this._conversationGuidParam);
                 }
             }
             else
             {
                 this._com.CommandText = this._concatQuery;
                 this._conversationGuidParam.Value = empty;
                 if (this._com.Parameters.Count == 1)
                 {
                     this._com.Parameters.Add(this._conversationGuidParam);
                 }
             }
         }
     }
     finally
     {
         Bid.ScopeLeave(ref ptr);
     }
 }
 /// <summary>
 /// Constructs an instance of IStoreSchemaInfo using parts of a row from SqlDataReader.
 /// </summary>
 /// <param name="reader">SqlDataReader whose row has shard information.</param>
 /// <param name="offset">Reader offset for column that begins shard information.</param>
 internal SqlSchemaInfo(SqlDataReader reader, int offset)
 {
     this.Name = reader.GetString(offset);
     this.ShardingSchemaInfo = reader.GetSqlXml(offset + 1);
 }