⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 forumssqldataprovider.cs

📁 解压即可使用
💻 CS
📖 第 1 页 / 共 5 页
字号:
                    else 
                    {

                        if (userFilter == ThreadUsersFilter.HideTopicsByNonAnonymousUsers)
                            whereClause.Append(" AND 0 NOT");
                        else
                            whereClause.Append(" AND 0");

                        whereClause.Append(" IN (SELECT UserID FROM " + this.databaseOwner + ".cs_Posts P WHERE ThreadID = T.ThreadID AND P.UserID = 0)");
                    }
                }
                #endregion

                #region Thread Status
                /*
                if (threadStatus != ThreadStatus.NotSet) {
                    switch (threadStatus) {
                        case ThreadStatus.NotAnswered:
                            whereClause.Append(" AND ThreadStatus = 0");
                            break;

                        case ThreadStatus.Answered:
                            whereClause.Append(" AND ThreadStatus = 0");
                            break;

                        default:
                            break;
                    }
                }*/
                #endregion

				#region Order By and Active Topics
				if (activeTopics) {
					whereClause.Append(" AND IsLocked = 0");
				}

				switch (sortBy) {
					case SortThreadsBy.LastPost:
				
						//SMW: Removed IsSticky as a sort condidtion
						//We should always be ordering by the date only, otherwise a post will always be stick!
						
						if (sortOrder == SortOrder.Ascending) {
							if (activeTopics || unansweredOnly)
								orderClause.Append("ThreadDate");
							else
								orderClause.Append(" StickyDate");
						} 
						else {
							if (activeTopics || unansweredOnly)
								orderClause.Append("ThreadDate DESC");
							else
								orderClause.Append(" StickyDate DESC");
						}
						break;

					case SortThreadsBy.TotalRatings:
						if (sortOrder == SortOrder.Ascending)
							orderClause.Append("TotalRatings");
						else
							orderClause.Append("TotalRatings DESC");
						break;
	        
					case SortThreadsBy.TotalReplies:
						if (sortOrder == SortOrder.Ascending)
							orderClause.Append("TotalReplies");
						else
							orderClause.Append("TotalReplies DESC");
						break;

					case SortThreadsBy.ThreadAuthor:
						if (sortOrder == SortOrder.Ascending)
							orderClause.Append("PostAuthor DESC");
						else
							orderClause.Append("PostAuthor");
						break;

					case SortThreadsBy.TotalViews:
						if (sortOrder == SortOrder.Ascending)
							orderClause.Append("TotalViews");
						else
							orderClause.Append("TotalViews DESC");
						break;
				}
                #endregion

                // Build the SQL statements
                sqlCountSelect.Append(fromClause.ToString());
                sqlCountSelect.Append(whereClause.ToString());

                sqlPopulateSelect.Append(fromClause.ToString());
                sqlPopulateSelect.Append(whereClause.ToString());
                sqlPopulateSelect.Append(orderClause.ToString());

                // Add Parameters to SPROC
                //
                command.Parameters.Add("@SectionID", SqlDbType.Int).Value = forumID;
                command.Parameters.Add("@PageIndex", SqlDbType.Int, 4).Value = pageIndex;
                command.Parameters.Add("@PageSize", SqlDbType.Int, 4).Value = pageSize;
                command.Parameters.Add("@sqlCount", SqlDbType.NVarChar, 4000).Value = sqlCountSelect.ToString();
                command.Parameters.Add("@sqlPopulate", SqlDbType.NVarChar, 4000).Value = sqlPopulateSelect.ToString();
                command.Parameters.Add("@UserID", SqlDbType.Int).Value = user.UserID;
                command.Parameters.Add("@ReturnRecordCount", SqlDbType.Bit).Value = returnRecordCount;
                command.Parameters.Add(this.SettingsIDParameter());

                // Execute the command
                connection.Open();
                using(SqlDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection))
                {

                    // Populate the ThreadSet
                    //
                    while (dr.Read()) 
                    {

                        // Add threads
                        //
                        if (forumID == 0)
                            threadSet.Threads.Add( PopulatePrivateMessageFromIDataReader (dr) );
                        else
                            threadSet.Threads.Add( PopulateThreadFromIDataReader(dr) );

                    }

                    // Do we need to return record count?
                    //
                    if (returnRecordCount) 
                    {

                        dr.NextResult();

                        dr.Read();

                        // Read the total records
                        //
                        threadSet.TotalRecords = (int) dr[0];

                    }

                    // Get the recipients if this is a request for
                    // the private message list
                    if ((forumID == 0) && (dr.NextResult()) ) 
                    {
                        Hashtable recipientsLookupTable = new Hashtable();

                        while(dr.Read()) 
                        {
                            int threadID = (int) dr["ThreadID"];

                            if (recipientsLookupTable[threadID] == null) 
                            {
                                recipientsLookupTable[threadID] = new ArrayList();
                            }

                            ((ArrayList) recipientsLookupTable[threadID]).Add(CommonDataProvider.cs_PopulateUserFromIDataReader(dr) );
                        }

                        // Map recipients to the threads
                        //
                        foreach (PrivateMessage thread in threadSet.Threads) 
                        {
                            thread.Recipients = (ArrayList) recipientsLookupTable[thread.ThreadID];
                        }

                    }


                    dr.Close();
                }
                connection.Close();

                return threadSet;
            }
        }

        #endregion

		#region Threads Read
		public override HybridDictionary GetThreadsRead (int sectionID, int userID) {

			HybridDictionary threadsRead = new HybridDictionary();

			using(SqlConnection myConnection = GetSqlConnection()) {
				SqlCommand myCommand = new SqlCommand(databaseOwner + ".cs_forums_threads_ThreadsRead", myConnection);
				SqlDataReader reader;
				myCommand.CommandType = CommandType.StoredProcedure;
				myCommand.Parameters.Add("@SectionID", SqlDbType.Int).Value = sectionID;
				myCommand.Parameters.Add("@UserID", SqlDbType.Int).Value = userID;
				myCommand.Parameters.Add(this.SettingsIDParameter());
                
				myConnection.Open();
                using(reader = myCommand.ExecuteReader(CommandBehavior.CloseConnection))
                {

                    // Have we marked all read?
                    reader.Read();
                    threadsRead.Add("ReadAfter", reader["ThreadID"]);

                    // Get the threads read for this section
                    reader.NextResult();
                    while (reader.Read()) 
                    {
                        threadsRead.Add( reader["ThreadID"], reader["ThreadID"]);
                    }
                    reader.Close();
                }

				myConnection.Close();

				return threadsRead;
			}		
		}
		#endregion

        public override SearchResultSet GetSearchResults(SearchQuery query, SearchTerms terms) 
        {

           string searchSQL =  SqlGenerator.SearchText(query,terms,GetSettingsID(),ApplicationType.Forum);//,out searchSQL,out recordCount);

            SearchResultSet result = new SearchResultSet();
            DateTime searchDuration;
            using( SqlConnection connection = GetSqlConnection() ) 
            {
                SqlCommand command = new SqlCommand("cs_forums_Search", connection);
                SqlDataReader reader;

                // Mark as stored procedure
                command.CommandType = CommandType.StoredProcedure;

                // Add parameters
                command.Parameters.Add("@SearchSQL", SqlDbType.NVarChar, 4000).Value = searchSQL;
                //command.Parameters.Add("@RecordCountSQL", SqlDbType.NVarChar, 4000).Value = recordCount;
                command.Parameters.Add("@PageIndex", SqlDbType.Int).Value = query.PageIndex;
                command.Parameters.Add("@PageSize", SqlDbType.Int).Value = query.PageSize;
                command.Parameters.Add(this.SettingsIDParameter());

                connection.Open();
                using(reader = command.ExecuteReader(CommandBehavior.CloseConnection))
                {

                    // Process first record set 
                    //
                    while (reader.Read()) 
                    {
                        ForumPost p = new ForumPost();

                        CommonDataProvider.PopulatePostFromIDataReader(reader,p);

                        result.Posts.Add(p);

                    }

                    // Move to the next result
                    //
                    if (reader.NextResult()) 
                    {
                        reader.Read();
                        result.TotalRecords = Convert.ToInt32(reader[0]);
                    }

                    // Get the duration of the search?
                    //
                    if (reader.NextResult()) 
                    {
                        reader.Read();

                        searchDuration = (DateTime) reader["Duration"];

                        // Calculate the number of seconds it took the search to execute
                        //
                        int ms = Convert.ToInt32(searchDuration.ToString("ff"));
                        result.SearchDuration = (double) ms / 1000;
                    }

                    reader.Close();
                }

                connection.Close();

                return result;
            }
        }


        public override PostSet SearchReindexPosts (int setsize, int settingsID) 
        {
            PostSet postSet = new PostSet();

            using(SqlConnection myConnection = GetSqlConnection()) 
            {
                SqlCommand myCommand = new SqlCommand(databaseOwner + ".cs_Search_PostReindex", myConnection);
                myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.Parameters.Add("@RowCount", SqlDbType.Int).Value = setsize;
                myCommand.Parameters.Add("@SettingsID",SqlDbType.Int,4).Value = settingsID;
                
                myConnection.Open();
                using(SqlDataReader dr = myCommand.ExecuteReader(CommandBehavior.CloseConnection|CommandBehavior.SingleResult)) 
                {
                    
                    while(dr.Read())
                    {
                        ForumPost fp = new ForumPost();
						CommonDataProvider.PopulateIndexPostFromIDataReader(dr,fp);
                        postSet.Posts.Add(fp);
                    }

                    dr.Close();
                }

                // Close the connection
                myConnection.Close();
                return postSet;
            }
        }

	
	/// <summary>
        /// Returns count of all posts in system
        /// </summary>
        /// <returns></returns>
        public override int GetTotalPostCount() 
        {
            int totalPostCount = 0;

            // Create Instance of Connection and Command Object
            using( SqlConnection myConnection = GetSqlConnection() ) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -