public static void system_initialize_executescripts(
            string script, 
            string scriptFile, 
            bool useTransactions)
        {
            CreateDatabase();
            script = MsSqlDbAccess.GetCommandTextReplaced(script);
            // apply database owner
            if (!String.IsNullOrEmpty(MsSqlDbAccess.SchemaName))
            { script = script.Replace("dbN", MsSqlDbAccess.DBName.ToUpper()); }
            else
            { script = script.Replace("dbN", "YAFNET"); }

            // apply grantee name
            if (!String.IsNullOrEmpty(MsSqlDbAccess.GranteeName))
            { script = script.Replace("grantName", MsSqlDbAccess.GranteeName.ToUpper()); }
            else
            { script = script.Replace("grantName", "PUBLIC");}
            // apply host name
            script = script.Replace("hostName", MsSqlDbAccess.HostName);

            //Scripts separation regexp
                string[] statements = System.Text.RegularExpressions.Regex.Split(script, "(?:--GO)", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                // Here comes add SET ARITHABORT ON for MSSQL amd Linq class
               // statements.Insert(0, "SET ARITHABORT ON");

            using (YAF.Classes.Data.MsSqlDbConnectionManager connMan = new MsSqlDbConnectionManager())
            {

                // use transactions...
                if (useTransactions)
                {
                    using (FbTransaction trans = connMan.OpenDBConnection.BeginTransaction(YAF.Classes.Data.MsSqlDbAccess.IsolationLevel))
                    {
                        foreach (string sql0 in statements)
                        {
                            string sql = sql0.Trim();

                            try
                            {
                                if (sql.ToLower().IndexOf("setuser") >= 0)
                                    continue;

                                if (sql.Length > 0)
                                {
                                    using (FbCommand cmd = new FbCommand())
                                    {
                                        cmd.Transaction = trans;
                                        cmd.Connection = connMan.DBConnection;
                                        cmd.CommandType = CommandType.Text;
                                        cmd.CommandText = sql.Trim();
                                        cmd.ExecuteNonQuery();
                                    }
                                }
                            }
                            catch (Exception x)
                            {
                                trans.Rollback();
                                throw new Exception(String.Format("FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}", scriptFile, sql, x.Message));
                            }
                        }
                        trans.Commit();
                    }
                }
                else
                {
                    // don't use transactions
                    foreach (string sql0 in statements)
                    {
                        string sql = sql0.Trim();

                        try
                        {
                            if (sql.ToLower().IndexOf("setuser") >= 0)
                                continue;

                            if (sql.Length > 0)
                            {
                                using (FbCommand cmd = new FbCommand())
                                {
                                    cmd.Connection = connMan.OpenDBConnection;
                                    cmd.CommandType = CommandType.Text;
                                    cmd.CommandText = sql.Trim();
                                    cmd.ExecuteNonQuery();
                                }
                            }
                        }
                        catch (Exception x)
                        {
                            throw new Exception(String.Format("FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}", scriptFile, sql, x.Message));
                        }
                    }
                }
            }
        }
예제 #2
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        public static DataSet forum_moderatelist([NotNull] object userID, [NotNull] object boardID)
        {
            using (var connMan = new MsSqlDbConnectionManager())
            {
                using (var ds = new DataSet())
                {
                    using (var da = new SqlDataAdapter(DbHelpers.GetObjectName("category_list"), connMan.OpenDBConnection))
                    {
                        using (SqlTransaction trans = da.SelectCommand.Connection.BeginTransaction())
                        {
                            da.SelectCommand.Transaction = trans;
                            da.SelectCommand.AddParam("BoardID", boardID);
                            da.SelectCommand.CommandType = CommandType.StoredProcedure;
                            da.Fill(ds, DbHelpers.GetObjectName("Category"));
                            da.SelectCommand.CommandText = DbHelpers.GetObjectName("forum_moderatelist");
                            da.SelectCommand.AddParam("UserID", userID);
                            da.Fill(ds, DbHelpers.GetObjectName("ForumUnsorted"));
                            DataTable dtForumListSorted = ds.Tables[DbHelpers.GetObjectName("ForumUnsorted")].Clone();
                            dtForumListSorted.TableName = DbHelpers.GetObjectName("Forum");
                            ds.Tables.Add(dtForumListSorted);
                            dtForumListSorted.Dispose();
                            forum_list_sort_basic(
                              ds.Tables[DbHelpers.GetObjectName("ForumUnsorted")],
                              ds.Tables[DbHelpers.GetObjectName("Forum")],
                              0,
                              0);
                            ds.Tables.Remove(DbHelpers.GetObjectName("ForumUnsorted"));

                            // vzrus: Remove here all forums with no reports. Would be better to do it in query...
                            // Array to write categories numbers
                            var categories = new int[ds.Tables[DbHelpers.GetObjectName("Forum")].Rows.Count];
                            int cntr = 0;

                            // We should make it before too as the colection was changed
                            ds.Tables[DbHelpers.GetObjectName("Forum")].AcceptChanges();
                            foreach (DataRow dr in ds.Tables[DbHelpers.GetObjectName("Forum")].Rows)
                            {
                                categories[cntr] = dr["CategoryID"].ToType<int>();
                                if (dr["ReportedCount"].ToType<int>() == 0 && dr["MessageCount"].ToType<int>() == 0)
                                {
                                    dr.Delete();
                                    categories[cntr] = 0;
                                }

                                cntr++;
                            }

                            ds.Tables[DbHelpers.GetObjectName("Forum")].AcceptChanges();

                            foreach (
                                DataRow dr in from DataRow dr in ds.Tables[DbHelpers.GetObjectName("Category")].Rows
                                              let dr1 = dr
                                              where
                                                  !categories.Where(
                                                      category => category == dr1["CategoryID"].ToType<int>()).Any()
                                              select dr)
                            {
                                dr.Delete();
                            }

                            ds.Tables[DbHelpers.GetObjectName("Category")].AcceptChanges();

                            ds.Relations.Add(
                              "FK_Forum_Category",
                              ds.Tables[DbHelpers.GetObjectName("Category")].Columns["CategoryID"],
                              ds.Tables[DbHelpers.GetObjectName("Forum")].Columns["CategoryID"]);

                            trans.Commit();
                        }

                        return ds;
                    }
                }
            }
        }
예제 #3
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        /// <summary>
        /// The system_initialize_executescripts.
        /// </summary>
        /// <param name="script">
        /// The script.
        /// </param>
        /// <param name="scriptFile">
        /// The script file.
        /// </param>
        /// <param name="useTransactions">
        /// The use transactions.
        /// </param>
        /// <exception cref="Exception">
        /// </exception>
        public static void system_initialize_executescripts([NotNull] string script, [NotNull] string scriptFile, bool useTransactions)
        {
            script = DbHelpers.GetCommandTextReplaced(script);

            List<string> statements = Regex.Split(script, "\\sGO\\s", RegexOptions.IgnoreCase).ToList();
            ushort sqlMajVersion = SqlServerMajorVersionAsShort();
            using (var connMan = new MsSqlDbConnectionManager())
            {
                // use transactions...
                if (useTransactions)
                {
                    using (SqlTransaction trans = connMan.OpenDBConnection.BeginTransaction())
                    {
                        foreach (string sql0 in statements)
                        {
                            string sql = sql0.Trim();

                            sql = DbHelpers.CleanForSQLServerVersion(sql, sqlMajVersion);

                            try
                            {
                                if (sql.ToLower().IndexOf("setuser") >= 0)
                                {
                                    continue;
                                }

                                if (sql.Length > 0)
                                {
                                    using (var cmd = new SqlCommand())
                                    {
                                        // added so command won't timeout anymore...
                                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);
                                        cmd.Transaction = trans;
                                        cmd.Connection = connMan.DBConnection;
                                        cmd.CommandType = CommandType.Text;
                                        cmd.CommandText = sql.Trim();
                                        cmd.ExecuteNonQuery();
                                    }
                                }
                            }
                            catch (Exception x)
                            {
                                trans.Rollback();
                                throw new Exception(
                                  String.Format("FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}", scriptFile, sql, x.Message));
                            }
                        }

                        trans.Commit();
                    }
                }
                else
                {
                    // don't use transactions
                    foreach (string sql0 in statements)
                    {
                        string sql = sql0.Trim();

                        // add ARITHABORT option
                        // sql = "SET ARITHABORT ON\r\nGO\r\n" + sql;

                        try
                        {
                            if (sql.ToLower().IndexOf("setuser") >= 0)
                            {
                                continue;
                            }

                            if (sql.Length > 0)
                            {
                                using (var cmd = new SqlCommand())
                                {
                                    cmd.Connection = connMan.OpenDBConnection;
                                    cmd.CommandType = CommandType.Text;
                                    cmd.CommandText = sql.Trim();
                                    cmd.ExecuteNonQuery();
                                }
                            }
                        }
                        catch (Exception x)
                        {
                            throw new Exception(
                              String.Format("FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}", scriptFile, sql, x.Message));
                        }
                    }
                }
            }
        }
예제 #4
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        /// <summary>
        /// The db_reindex_new.
        /// </summary>
        public static string db_reindex_new()
        {
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(reindexDb_InfoMessage);
                    connMan.DBConnection.FireInfoMessageEventOnUserErrors = true;
                    // create statistic getting SQL...
                    var sb = new StringBuilder();

                    sb.AppendLine("DECLARE @MyTable VARCHAR(255)");
                    sb.AppendLine("DECLARE myCursor");
                    sb.AppendLine("CURSOR FOR");
                    sb.AppendFormat(
                      "SELECT table_name FROM information_schema.tables WHERE table_type = 'base table' AND table_name LIKE '{0}%'",
                      Config.DatabaseObjectQualifier);
                    sb.AppendLine("OPEN myCursor");
                    sb.AppendLine("FETCH NEXT");
                    sb.AppendLine("FROM myCursor INTO @MyTable");
                    sb.AppendLine("WHILE @@FETCH_STATUS = 0");
                    sb.AppendLine("BEGIN");
                    sb.AppendLine("PRINT 'Reindexing Table:  ' + @MyTable");
                    sb.AppendLine("DBCC DBREINDEX(@MyTable, '', 80)");
                    sb.AppendLine("FETCH NEXT");
                    sb.AppendLine("FROM myCursor INTO @MyTable");
                    sb.AppendLine("END");
                    sb.AppendLine("CLOSE myCursor");
                    sb.AppendLine("DEALLOCATE myCursor");

                    using (var cmd = new SqlCommand(sb.ToString(), connMan.OpenDBConnection))
                    {
                        cmd.Connection = connMan.DBConnection;

                        // up the command timeout...
                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);

                        // run it...
                        cmd.ExecuteNonQuery();
                    }
                    return reindexDbMessage;
                }
            }
            finally
            {
                reindexDbMessage = string.Empty;
            }
        }
예제 #5
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        /// <summary>
        /// The db_shrink.
        /// </summary>
        /// <param name="DBName">
        /// The db name.
        /// </param>
        public static string db_shrink_new()
        {
            try
            {
                using (var conn = new MsSqlDbConnectionManager())
                {
                    conn.InfoMessage += new YafDBConnInfoMessageEventHandler(dbShink_InfoMessage);
                    conn.DBConnection.FireInfoMessageEventOnUserErrors = true;
                    string ShrinkSql = "DBCC SHRINKDATABASE(N'" + conn.DBConnection.Database + "')";
                    var ShrinkConn = new SqlConnection(Config.ConnectionString);
                    var ShrinkCmd = new SqlCommand(ShrinkSql, ShrinkConn);
                    ShrinkConn.Open();
                    ShrinkCmd.ExecuteNonQuery();
                    ShrinkConn.Close();
                    using (var cmd = new SqlCommand(ShrinkSql, conn.OpenDBConnection))
                    {
                        cmd.Connection = conn.DBConnection;
                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);
                        cmd.ExecuteNonQuery();
                    }
                }
                return dbShinkMessage;
            }
            finally
            {
                dbShinkMessage = string.Empty;
            }

        }
예제 #6
0
        /// <summary>
        /// The user_register.
        /// </summary>
        /// <param name="boardID">
        /// The board id.
        /// </param>
        /// <param name="userName">
        /// The user name.
        /// </param>
        /// <param name="password">
        /// The password.
        /// </param>
        /// <param name="hash">
        /// The hash.
        /// </param>
        /// <param name="email">
        /// The email.
        /// </param>
        /// <param name="location">
        /// The location.
        /// </param>
        /// <param name="homePage">
        /// The home page.
        /// </param>
        /// <param name="timeZone">
        /// The time zone.
        /// </param>
        /// <param name="approved">
        /// The approved.
        /// </param>
        /// <returns>
        /// The user_register.
        /// </returns>
        public static bool user_register([NotNull] object boardID, [NotNull] object userName, [NotNull] object password, [NotNull] object hash, [NotNull] object email, [NotNull] object location, [NotNull] object homePage, [NotNull] object timeZone,
                                         bool approved)
        {
            using (var connMan = new MsSqlDbConnectionManager())
            {
                using (SqlTransaction trans = connMan.OpenDBConnection.BeginTransaction(MsSqlDbAccess.IsolationLevel))
                {
                    try
                    {
                        using (var cmd = MsSqlDbAccess.GetCommand("user_save", connMan.DBConnection))
                        {
                            cmd.Transaction = trans;
                            cmd.CommandType = CommandType.StoredProcedure;
                            int UserID = 0;
                            cmd.Parameters.AddWithValue("UserID", UserID);
                            cmd.Parameters.AddWithValue("BoardID", boardID);
                            cmd.Parameters.AddWithValue("UserName", userName);
                            cmd.Parameters.AddWithValue(
                              "Password", FormsAuthentication.HashPasswordForStoringInConfigFile(password.ToString(), "md5"));
                            cmd.Parameters.AddWithValue("Email", email);
                            cmd.Parameters.AddWithValue("Hash", hash);
                            cmd.Parameters.AddWithValue("Location", location);
                            cmd.Parameters.AddWithValue("HomePage", homePage);
                            cmd.Parameters.AddWithValue("TimeZone", timeZone);
                            cmd.Parameters.AddWithValue("Approved", approved);
                            cmd.Parameters.AddWithValue("PMNotification", 1);
                            cmd.Parameters.AddWithValue("AutoWatchTopics", 0);
                            cmd.ExecuteNonQuery();
                        }

                        trans.Commit();
                    }
                    catch (Exception x)
                    {
                        trans.Rollback();
                        eventlog_create(null, "user_register in YAF.Classes.Data.DB.cs", x, EventLogTypes.Error);
                        return false;
                    }
                }
            }

            return true;
        }
예제 #7
0
        /// <summary>
        /// System initialize and execute script's.
        /// </summary>
        /// <param name="script">The script.</param>
        /// <param name="scriptFile">The script file.</param>
        /// <param name="useTransactions">The use transactions.</param>
        public static void system_initialize_executescripts([NotNull] string script, [NotNull] string scriptFile, bool useTransactions)
        {
            script = DbHelpers.GetCommandTextReplaced(script);

            var statements = Regex.Split(script, "\\sGO\\s", RegexOptions.IgnoreCase).ToList();

            using (var connMan = new MsSqlDbConnectionManager())
            {
                // use transactions...
                if (useTransactions)
                {
                    using (SqlTransaction trans = connMan.OpenDBConnection.BeginTransaction())
                    {
                        foreach (var sql in statements.Select(sql0 => sql0.Trim()))
                        {
                            try
                            {
                                if (sql.ToLower().IndexOf("setuser") >= 0)
                                {
                                    continue;
                                }

                                if (sql.Length <= 0)
                                {
                                    continue;
                                }

                                using (var cmd = new SqlCommand())
                                {
                                    // added so command won't timeout anymore...
                                    cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);
                                    cmd.Transaction = trans;
                                    cmd.Connection = connMan.DBConnection;
                                    cmd.CommandType = CommandType.Text;
                                    cmd.CommandText = sql.Trim();
                                    cmd.ExecuteNonQuery();
                                }
                            }
                            catch (Exception x)
                            {
                                trans.Rollback();
                                throw new Exception(
                                    "FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}".FormatWith(scriptFile, sql, x.Message));
                            }
                        }

                        trans.Commit();
                    }
                }
                else
                {
                    // don't use transactions
                    foreach (var sql in statements.Select(sql0 => sql0.Trim()))
                    {
                        try
                        {
                            if (sql.ToLower().IndexOf("setuser") >= 0)
                            {
                                continue;
                            }

                            if (sql.Length <= 0)
                            {
                                continue;
                            }

                            using (var cmd = new SqlCommand())
                            {
                                cmd.Connection = connMan.OpenDBConnection;
                                cmd.CommandType = CommandType.Text;
                                cmd.CommandText = sql.Trim();
                                cmd.ExecuteNonQuery();
                            }
                        }
                        catch (Exception x)
                        {
                            throw new Exception(
                                "FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}".FormatWith(scriptFile, sql, x.Message));
                        }
                    }
                }
            }
        }
        public static string system_initialize_replace_entries(string script)
        {
            bool conEncoding = false;
            string[] options = null;
            // apply object qualifier
            if (!String.IsNullOrEmpty(Config.DatabaseObjectQualifier))
            { script = script.Replace("{objectQualifier}", Config.DatabaseObjectQualifier); }
            else
            { script = script.Replace("{objectQualifier}", "yaf_"); }
            string dbcharset = null;
            string dbcollation = null;
            script = MsSqlDbAccess.GetCommandTextReplaced(script);

             using (YAF.Classes.Data.MsSqlDbConnectionManager connMan = new MsSqlDbConnectionManager())
             {
            options = connMan.DBConnection.ConnectionString.Split(';');
             }
             foreach (string str in options)
             {
             string[] optionValue = str.Split('=');
             // apply database name
             if (optionValue[0].Trim().ToLower() == "database")
             {
                 if (optionValue[1].Trim() != Config.SchemaName || !string.IsNullOrEmpty(optionValue[1].Trim()))
                 {
                     script = script.Replace("{databaseName}", optionValue[1].Trim());
                 }
                 else
                     script = script.Replace("{databaseName}", Config.SchemaName);
             }

             // apply user name from connection string to override defaults in config
             // currently it's not used
             if (optionValue[0].Trim().ToLowerInvariant().Contains("user id")
                 || optionValue[0].Trim().ToLowerInvariant().Contains("Username")
                 || optionValue[0].Trim().ToLowerInvariant().Contains("User name")
                 || optionValue[0].Trim().ToLowerInvariant().Contains("Uid"))
             {
                 if (optionValue[1].Trim() != Config.DatabaseOwner || !string.IsNullOrEmpty(optionValue[1].Trim()))
                 {
                     script = script.Replace("{databaseName}", optionValue[1].Trim());
                 }
                 else
                     script = script.Replace("{databaseName}", Config.DatabaseOwner.Trim());

             }

             // Encodings
             // apply charset

             if ((str.Contains("Charset") || str.Contains("Character Set")) && string.IsNullOrEmpty(optionValue[1]))
             {
                 //Verify if it's valid
                 using (MySqlCommand cmd = MsSqlDbAccess.GetCommand("SHOW VARIABLES LIKE 'character_set_database'", true))
                 {
                     DataTable dtt = MsSqlDbAccess.Current.GetData(cmd);
                     if (dtt.Rows.Count > 0)
                     {
                         foreach (DataRow dr in dtt.Rows)
                         {
                             if (dr["Variable_name"] == optionValue[1].Trim())
                             {
                                 dbcharset = dr["Value"].ToString();
                             }
                         }
                         conEncoding = true;
                     }

                 }

             }

             if (!string.IsNullOrEmpty(Config.DatabaseEncoding))
             {
                 //Verify if it's valid
                 using (MySqlCommand cmd = MsSqlDbAccess.GetCommand("SHOW VARIABLES LIKE 'character_set_database'", true))
                 {
                     DataTable dtt1 = MsSqlDbAccess.Current.GetData(cmd);
                     if (dtt1.Rows.Count > 0)
                     {
                         foreach (DataRow dr in dtt1.Rows)
                         {
                             if (dr["Variable_name"].ToString() == "character_set_database")
                             {
                                 dbcharset = dr["Value"].ToString();
                             }
                         }
                         conEncoding = true;
                     }

                 }
             }
             }
                  if (conEncoding)
                     {
                         if (Config.DatabaseCollation.Contains(dbcharset))
                             dbcollation = Config.DatabaseCollation;
                         if (string.IsNullOrEmpty(dbcollation))
                         {
                             using (MySqlCommand cmd = MsSqlDbAccess.GetCommand("SHOW CHARACTER SET;", true))
                             {
                                 DataTable dttt = MsSqlDbAccess.Current.GetData(cmd);
                                 foreach (DataRow dr in dttt.Rows)
                                 {
                                     if (dr["Charset"].ToString() == dbcharset)
                                     {

                                         dbcollation = dr["Default collation"].ToString();
                                     }

                                 }
                             }
                         }
                     }

            //No entry for encoding in connection string or app.config
                if (!conEncoding)
                {
                    using (MySqlCommand cmd = MsSqlDbAccess.GetCommand("SHOW VARIABLES LIKE 'collation_database'", true))
                    {

                        dbcollation = MsSqlDbAccess.Current.GetData(cmd).Rows[0]["Value"].ToString();

                    }
                    using (MySqlCommand cmd = MsSqlDbAccess.GetCommand("SHOW VARIABLES LIKE 'character_set_database'", true))
                    {

                        dbcharset = MsSqlDbAccess.Current.GetData(cmd).Rows[0]["Value"].ToString();
                    }
                }

                  script = script.Replace("{databaseEncoding}_{databaseCollation}", dbcollation);
                  script = script.Replace("{databaseEncoding}", dbcharset);

                return script;
        }
 public static string db_getstats_new()
 {
     try
     {
         using (var connMan = new MsSqlDbConnectionManager())
         {
             connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(getStats_InfoMessage);
             using (NpgsqlCommand cmd = new NpgsqlCommand("VACUUM ANALYZE VERBOSE;", connMan.OpenDBConnection))
             {
                 cmd.CommandType = CommandType.Text;
                 // up the command timeout...
                 cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);
                 // run it...
                 cmd.ExecuteNonQuery();
                 return getStatsMessage;
             }
         }
     }
     finally
     {
         getStatsMessage = string.Empty;
     }
 }
        /// <summary>
        /// The method saves many questions and answers to them in a single transaction 
        /// </summary>
        /// <param name="pollList">List to hold all polls data</param>
        /// <returns>Last saved poll id.</returns>
        public static int? poll_save(List<PollSaveList> pollList)
        {
            foreach (PollSaveList question in pollList)
            {
                 using (MsSqlDbConnectionManager connMan = new MsSqlDbConnectionManager())
                {
                    using (
                        MySqlTransaction trans = connMan.OpenDBConnection.BeginTransaction(MsSqlDbAccess.IsolationLevel)
                        )
                    {
                      try
                        {
                            int? myPollID = null;

                            StringBuilder sb = new StringBuilder();

                            // Check if the group already exists
                            if (question.TopicId > 0)
                            {
                                sb.Append("select PollID  from ");
                                sb.Append(MsSqlDbAccess.GetObjectName("Topic"));
                                sb.Append(" WHERE TopicID = ?TopicID; ");
                            }
                            else if (question.ForumId > 0)
                            {

                                sb.Append("select PollGroupID  from ");
                                sb.Append(MsSqlDbAccess.GetObjectName("Forum"));
                                sb.Append(" WHERE ForumID = ?ForumID;");
                            }
                            else if (question.CategoryId > 0)
                            {

                                sb.Append("select PollGroupID  from ");
                                sb.Append(MsSqlDbAccess.GetObjectName("Category"));
                                sb.Append(" WHERE CategoryID = ?CategoryID;");
                            }
                            int? pollGroupId = null;
                            object pollGroupIdObj = null;
                            using (MySqlCommand cmdPoll = MsSqlDbAccess.GetCommand(sb.ToString(), true))
                            {
                                cmdPoll.Transaction = trans;
                                if (question.TopicId > 0)
                                {
                                    cmdPoll.Parameters.Add("?TopicID", MySqlDbType.Int32).Value = question.TopicId;
                                }
                                else if (question.ForumId > 0)
                                {
                                    cmdPoll.Parameters.Add("?ForumID", MySqlDbType.Int32).Value = question.ForumId;
                                }
                                else if (question.CategoryId > 0)
                                {
                                    cmdPoll.Parameters.Add("?CategoryID", MySqlDbType.Int32).Value = question.CategoryId;
                                }
                                pollGroupIdObj = MsSqlDbAccess.Current.ExecuteScalar(cmdPoll, false);

                            }
                            sb = new StringBuilder();
                            // the group doesn't exists, create a new one
                            int pgIdcheck = 0;
                            if (!int.TryParse(pollGroupIdObj.ToString(), out pgIdcheck))
                            {
                                sb.Append(string.Format("INSERT INTO {0}(UserID,Flags ) VALUES(?UserID, ?Flags); ", MsSqlDbAccess.GetObjectName("PollGroupCluster")));
                              //  sb.Append("SELECT PollGroupID FROM ");
                                sb.Append("SELECT LAST_INSERT_ID(); ");
                                //  sb.Append(MsSqlDbAccess.GetObjectName("PollGroupCluster"));
                                //   sb.Append(" WHERE PollGroupID = LAST_INSERT_ID(); ");
                                using (MySqlCommand cmdPoll = MsSqlDbAccess.GetCommand(sb.ToString(), true))
                                {
                                    cmdPoll.Transaction = trans;
                                    cmdPoll.Parameters.Add("?UserID", MySqlDbType.Int32).Value = question.UserId;
                                    // set poll group flags
                                    int groupFlags = 0;
                                    if (question.IsBound)
                                    {
                                        groupFlags = groupFlags | 2;
                                    }
                                    cmdPoll.Parameters.Add("?Flags", MySqlDbType.Int32).Value = groupFlags;

                                    pollGroupId = Convert.ToInt32(MsSqlDbAccess.Current.ExecuteScalar(cmdPoll, false));

                                }
                            }
                            else
                            {

                               sb.Append(String.Format("UPDATE {0} SET Flags = (CASE WHEN Flags <> 0 AND (?Flags & 2) = 2 THEN Flags = Flags | 2 ELSE ?Flags END)  WHERE PollGroupID = ?PollGroupID; ", MsSqlDbAccess.GetObjectName("PollGroupCluster")));
                               using (MySqlCommand cmdPollUpdate = MsSqlDbAccess.GetCommand(sb.ToString(), true))
                                {
                                    cmdPollUpdate.Transaction = trans;
                                    cmdPollUpdate.Parameters.Add("?UserID", MySqlDbType.Int32).Value = question.UserId;
                                    // set poll group flags
                                    int groupFlags = 0;
                                    if (question.IsBound)
                                    {
                                        groupFlags = groupFlags | 2;
                                    }
                                    cmdPollUpdate.Parameters.Add("?Flags", MySqlDbType.Int32).Value = groupFlags;
                                    cmdPollUpdate.Parameters.Add("?PollGroupID", MySqlDbType.Int32).Value = pollGroupId;
                                    MsSqlDbAccess.Current.ExecuteNonQuery(cmdPollUpdate, false);

                                }
                                pollGroupId = (int?)pollGroupIdObj;
                            }

                            sb = new System.Text.StringBuilder(string.Format("INSERT INTO {0}",MsSqlDbAccess.GetObjectName("Poll")));

                            if (question.Closes > DateTime.MinValue)
                            {
                                sb.Append("(Question,Closes, UserID,PollGroupID,ObjectPath,MimeType,Flags) ");
                            }
                            else
                            {
                                sb.Append("(Question,UserID,PollGroupID,ObjectPath,MimeType,Flags) ");
                            }

                            sb.Append(" VALUES(");
                            sb.Append("?Question");

                            if (question.Closes > DateTime.MinValue)
                            {
                                sb.Append(",?Closes");
                            }
                            sb.Append(",?UserID,?PollGroupID,?QuestionObjectPath,?QuestionMimeType,?PollFlags");
                            sb.Append("); ");

                            sb.Append("SELECT ");
                            sb.Append(" LAST_INSERT_ID(); ");
                            using (MySqlCommand cmdPoll = MsSqlDbAccess.GetCommand(sb.ToString(), true))
                            {
                                cmdPoll.Transaction = trans;
                                cmdPoll.CommandType = CommandType.Text;
                                cmdPoll.Parameters.Add("?Question", MySqlDbType.VarChar).Value = question.Question;

                                if (question.Closes > DateTime.MinValue)
                                {
                                    cmdPoll.Parameters.Add("?Closes", MySqlDbType.DateTime).Value = question.Closes;
                                }
                                cmdPoll.Parameters.Add("?UserID", MySqlDbType.VarChar).Value = question.UserId;
                                cmdPoll.Parameters.Add("?PollGroupID", MySqlDbType.VarChar).Value = pollGroupId;
                                cmdPoll.Parameters.Add("?QuestionObjectPath", MySqlDbType.VarChar).Value =
                                    question.QuestionObjectPath;
                                cmdPoll.Parameters.Add("?QuestionMimeType", MySqlDbType.VarChar).Value =
                                    question.QuestionMimeType;
                                int pollFlags = question.IsClosedBound ? 0 | 4 : 0;
                                pollFlags = question.AllowMultipleChoices ? pollFlags | 8 : pollFlags;
                                pollFlags = question.ShowVoters
                                                ? pollFlags | 16
                                                : pollFlags;
                                pollFlags = question.AllowSkipVote
                                                ? pollFlags | 32
                                                : pollFlags;

                                cmdPoll.Parameters.Add("?PollFlags", MySqlDbType.VarChar).Value = pollFlags;
                                object dd = MsSqlDbAccess.Current.ExecuteScalar(cmdPoll, false);
                                myPollID = Convert.ToInt32(dd);

                            }

                            sb = new System.Text.StringBuilder();

                            // The cycle through question reply choices
                            for (uint choiceCount = 0; choiceCount < question.Choice.GetUpperBound(1) + 1; choiceCount++)
                            {
                                if (!string.IsNullOrEmpty(question.Choice[0, choiceCount]))
                                {
                                   // sb.Append(string.Format(" INSERT INTO  "));
                                  //  sb.Append(MsSqlDbAccess.GetObjectName("Choice"));
                                 //   sb.Append(string.Format("("));
                                    // sb.Append(string.Format(" INSERT INTO {0}(",MsSqlDbAccess.GetObjectName("Choice")));
                                  //  sb.AppendFormat("PollID,Choice,Votes) VALUES(?PollID{0},?Choice{0},?Votes{0}); ",
                                  //                  choiceCount);
                                    sb.AppendFormat("INSERT INTO  {0}(PollID,Choice,Votes,ObjectPath,MimeType) VALUES(?PollID{1},?Choice{1},?Votes{1},?ChoiceObjectPath{1},?ChoiceMimeType{1}); ",
                                        MsSqlDbAccess.GetObjectName("Choice"), choiceCount);
                                }
                            }
                            using (MySqlCommand cmd = MsSqlDbAccess.GetCommand(sb.ToString(), true))
                            {
                                /* MySqlParameter ret = new MySqlParameter();
                        ret.ParameterName = "?PollIDOut";
                        ret.MySqlDbType = MySqlDbType.Int32;
                        ret.Direction = ParameterDirection.Output;
                        cmd.Parameters.Add(ret);
                        cmd.Parameters.Add("?Question", MySqlDbType.VarChar ).Value = question.Question;

                        if (question.Closes > DateTime.MinValue)
                        {
                            cmd.Parameters.Add("?Closes", MySqlDbType.DateTime ).Value = question.Closes;
                        }
                       */
                                cmd.Transaction = trans;
                                for (uint choiceCount1 = 0;
                                     choiceCount1 < question.Choice.GetUpperBound(1) + 1;
                                     choiceCount1++)
                                {
                                    if (!string.IsNullOrEmpty(question.Choice[0, choiceCount1]))
                                    {

                                        cmd.Parameters.Add("?PollID{0}".FormatWith(choiceCount1), MySqlDbType.Int32).Value =
                                            myPollID;
                                        cmd.Parameters.Add(String.Format("?Choice{0}", choiceCount1), MySqlDbType.VarChar).
                                            Value
                                            = question.Choice[0, choiceCount1];
                                        cmd.Parameters.Add(String.Format("?Votes{0}", choiceCount1), MySqlDbType.Int32).
                                            Value =
                                            0;
                                        cmd.Parameters.Add(String.Format("?ChoiceObjectPath{0}", choiceCount1),
                                                           MySqlDbType.VarChar).Value =
                                            question.Choice[1, choiceCount1].IsNotSet()
                                                ? String.Empty
                                                : question.Choice[1, choiceCount1];
                                        cmd.Parameters.Add(String.Format("?ChoiceMimeType{0}", choiceCount1),
                                                           MySqlDbType.VarChar).Value =
                                            question.Choice[2, choiceCount1].IsNotSet()
                                                ? String.Empty
                                                : question.Choice[2, choiceCount1];
                                    }
                                }
                                MsSqlDbAccess.Current.ExecuteNonQuery(cmd, false);

                            }

                            sb = new StringBuilder();
                            // fill a pollgroup field - double work if a poll exists
                            if (question.TopicId > 0)
                            {

                                sb.Append("UPDATE ");
                                sb.Append(MsSqlDbAccess.GetObjectName("Topic"));
                                sb.Append(" SET PollID = ?NewPollGroupID WHERE TopicID =?TopicID; ");

                            }

                            // fill a pollgroup field in Forum Table if the call comes from a forum's topic list
                            if (question.ForumId > 0)
                            {
                                sb.Append("UPDATE ");
                                sb.Append(MsSqlDbAccess.GetObjectName("Forum"));
                                sb.Append(" SET PollGroupID= ?NewPollGroupID WHERE ForumID= ?ForumID; ");
                            }

                            // fill a pollgroup field in Category Table if the call comes from a category's topic list
                            if (question.CategoryId > 0)
                            {
                                sb.Append("UPDATE ");
                                sb.Append(MsSqlDbAccess.GetObjectName("Category"));
                                sb.Append(" SET PollGroupID = ?NewPollGroupID WHERE CategoryID= ?CategoryID; ");
                            }

                            using (MySqlCommand cmdPoll = MsSqlDbAccess.GetCommand(sb.ToString(), true))
                            {
                               cmdPoll.Transaction = trans;
                                cmdPoll.Parameters.Add("?NewPollGroupID", MySqlDbType.Int32).Value = pollGroupId;
                                if (question.TopicId > 0)
                                {
                                    cmdPoll.Parameters.Add("?TopicID", MySqlDbType.Int32).Value = question.TopicId;
                                }

                                // fill a pollgroup field in Forum Table if the call comes from a forum's topic list
                                if (question.ForumId > 0)
                                {
                                    cmdPoll.Parameters.Add("?ForumID", MySqlDbType.Int32).Value = question.ForumId;
                                }

                                // fill a pollgroup field in Category Table if the call comes from a category's topic list
                                if (question.CategoryId > 0)
                                {
                                    cmdPoll.Parameters.Add("?CategoryID", MySqlDbType.Int32).Value = question.CategoryId;
                                }

                                MsSqlDbAccess.Current.ExecuteNonQuery(cmdPoll, false);

                            }

                            /*if (ret.Value != DBNull.Value)
                       {
                           return (int?)ret.Value;
                       }*/
                           trans.Commit();
                            return pollGroupId;
                       }
                        catch (Exception e)
                        {
                           trans.Rollback();
                           throw new Exception(e.Message);

                        }
                        finally
                      {
                          connMan.CloseConnection();
                      }
                    }
                }
            }
            return null;
        }
        /// <summary>
        /// The set profile properties.
        /// </summary>
        /// <param name="appName">
        /// The app name.
        /// </param>
        /// <param name="userID">
        /// The user id.
        /// </param>
        /// <param name="values">
        /// The values.
        /// </param>
        /// <param name="settingsColumnsList">
        /// The settings columns list.
        /// </param>
        public static void SetProfileProperties([NotNull] int boardId, [NotNull] object appName, [NotNull] int userID, [NotNull] SettingsPropertyValueCollection values, [NotNull] List<SettingsPropertyColumn> settingsColumnsList, bool dirtyOnly)
        {
            string userName = string.Empty;
            var dtu = LegacyDb.UserList(boardId, userID, true, null, null, true);
            foreach (var typedUserList in dtu)
            {
                userName = typedUserList.Name;
                break;

            }
            if (userName.IsNotSet())
            {
                return;
            }
            string sql = @"SELECT 1 FROM {0}  WHERE UserId = @i_UserID AND ApplicationName = @i_ApplicationName LIMIT 1".FormatWith(MsSqlDbAccess.GetObjectName("UserProfile"));
            bool exists = false;
            using (var cmd = MsSqlDbAccess.GetCommand(sql, true))
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add("i_UserID", MySqlDbType.Int32).Value = userID;
                cmd.Parameters.Add("i_ApplicationName", MySqlDbType.VarChar).Value = appName;
                exists =  Convert.ToInt32(MsSqlDbAccess.Current.ExecuteScalar(cmd)) > 0;
            }
            using (var conn = new MsSqlDbConnectionManager().OpenDBConnection)
            {
                var cmd = new MySqlCommand();

                cmd.Connection = conn;

                string table = MsSqlDbAccess.GetObjectName("UserProfile");
                StringBuilder sqlCommand = new StringBuilder();

              //  StringBuilder sqlCommand = new StringBuilder("IF EXISTS (SELECT 1 FROM ").Append(table);
              //  sqlCommand.Append(" WHERE UserId = @UserID AND ApplicationName = @ApplicationName) ");
                cmd.Parameters.Add("i_UserID",MySqlDbType.Int32).Value = userID;

                // Build up strings used in the query
                var columnStr = new StringBuilder();
                var valueStr = new StringBuilder();
                var setStr = new StringBuilder();
                int count = 0;

                foreach (SettingsPropertyColumn column in settingsColumnsList.Where(column => !dirtyOnly || values[column.Settings.Name].IsDirty))
                {
                    columnStr.Append(", ");
                    valueStr.Append(", ");
                    columnStr.Append(column.Settings.Name);
                    string valueParam = "@i_Value" + count;
                    valueStr.Append(valueParam);
                    cmd.Parameters.AddWithValue(valueParam, values[column.Settings.Name].PropertyValue);

                    if ((column.DataType != MySqlDbType.Timestamp) || column.Settings.Name != "LastUpdatedDate" || column.Settings.Name != "LastActivity")
                    {
                        if (count > 0)
                        {
                            setStr.Append(",");
                        }

                        setStr.Append(column.Settings.Name);
                        setStr.Append("=");
                        setStr.Append(valueParam);
                    }

                    count++;
                }

                columnStr.Append(",LastUpdatedDate ");
                valueStr.Append(",@i_LastUpdatedDate");
                setStr.Append(",LastUpdatedDate=@i_LastUpdatedDate");
                cmd.Parameters.AddWithValue("@i_LastUpdatedDate", DateTime.UtcNow);

                // MembershipUser mu = System.Web.Security.Membership.GetUser(userID);

                columnStr.Append(",LastActivity ");
                valueStr.Append(",@i_LastActivity");
                setStr.Append(",LastActivity=@i_LastActivity");
                cmd.Parameters.AddWithValue("@i_LastActivity", DateTime.UtcNow);

                columnStr.Append(",ApplicationName ");
                valueStr.Append(",@i_ApplicationName");
                setStr.Append(",ApplicationName=@i_ApplicationName");
                cmd.Parameters.Add("i_ApplicationName", MySqlDbType.VarChar).Value = appName;

                columnStr.Append(",IsAnonymous ");
                valueStr.Append(",@i_IsAnonymous");
                setStr.Append(",IsAnonymous=@i_IsAnonymous");
                cmd.Parameters.AddWithValue("@i_IsAnonymous", 0);

                columnStr.Append(",UserName ");
                valueStr.Append(",@i_UserName");
                setStr.Append(",UserName=@i_UserName");
                cmd.Parameters.AddWithValue("@i_UserName", userName);
                if (exists)
                {
                    sqlCommand.Append("UPDATE ").Append(table).Append(" SET ").Append(setStr.ToString());
                    sqlCommand.Append(" WHERE UserID = @i_UserID").Append("");
                }
                else
                {
                    sqlCommand.Append("INSERT ").Append(table).Append(" (UserID").Append(columnStr.ToString());
                    sqlCommand.Append(") VALUES (@i_UserID").Append("").Append(valueStr.ToString()).Append(
                      ");");
                }

                cmd.CommandText = sqlCommand.ToString();
                cmd.CommandType = CommandType.Text;

                cmd.ExecuteNonQuery();
            }
        }
        public static string db_runsql_new(string sql, bool useTransaction)
        {
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(my_runSql_InfoMessage);

                    sql = MsSqlDbAccess.GetCommandTextReplaced(sql.Trim());

                    using (var command = new MySqlCommand(sql, connMan.OpenDBConnection))
                    {
                        command.CommandTimeout = 9999;
                        command.Connection = connMan.OpenDBConnection;

                        return InnerRunSqlExecuteReader(command, useTransaction);
                    }
                }
            }
            finally
            {
                my_messageRunSql = string.Empty;
            }
        }
        public static string db_reindex_new()
        {
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(my_reindexDb_InfoMessage);
            using (MySqlCommand cmd = new MySqlCommand(String.Format("ANALYZE TABLE {0}.{1}user;", Config.SchemaName, Config.DatabaseObjectQualifier)))
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                cmd.CommandType = CommandType.Text;
                // up the command timeout...
                cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);

                // run it...

                sb.Append( "SELECT table_name FROM  INFORMATION_SCHEMA.SCHEMATA s LEFT JOIN INFORMATION_SCHEMA.TABLES t ON s.schema_name = t.table_schema WHERE t.engine ='InnoDB'  AND t.TABLE_TYPE='BASE TABLE' " );
                sb.Append( ";" );
               MsSqlDbAccess.Current.ExecuteNonQuery(cmd, false);
               return my_reindexDbMessage;
            }
                }

            }
             finally
             {
             my_reindexDbMessage = string.Empty;
             }
        }
        /// <summary>
        /// The db_getstats_new.
        /// </summary>
        public static string db_getstats_new()
        {
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(getStats_InfoMessage);
                    using (
                        MySqlCommand cmd =
                            new MySqlCommand(String.Format("ANALYZE TABLE {0}.{1}user;", Config.SchemaName,
                                                           Config.DatabaseObjectQualifier)))
                    {

                        cmd.CommandType = CommandType.Text;
                        // up the command timeout...
                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);

                        // run it...
                        MsSqlDbAccess.Current.ExecuteNonQuery(cmd, false);
                        return getStatsMessage;
                    }
                }

            }
            finally
            {
                getStatsMessage = string.Empty;
            }
        }
예제 #15
0
        /// <summary>
        /// The db_getstats_new.
        /// </summary>
        public static string db_getstats_new()
        {
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(getStats_InfoMessage);

                    connMan.DBConnection.FireInfoMessageEventOnUserErrors = true;

                    // create statistic getting SQL...
                    var sb = new StringBuilder();

                    sb.AppendLine("DECLARE @TableName sysname");
                    sb.AppendLine("DECLARE cur_showfragmentation CURSOR FOR");
                    sb.AppendFormat(
                        "SELECT table_name FROM information_schema.tables WHERE table_type = 'base table' AND table_name LIKE '{0}%'",
                        Config.DatabaseObjectQualifier);
                    sb.AppendLine("OPEN cur_showfragmentation");
                    sb.AppendLine("FETCH NEXT FROM cur_showfragmentation INTO @TableName");
                    sb.AppendLine("WHILE @@FETCH_STATUS = 0");
                    sb.AppendLine("BEGIN");
                    sb.AppendLine("DBCC SHOWCONTIG (@TableName)");
                    sb.AppendLine("FETCH NEXT FROM cur_showfragmentation INTO @TableName");
                    sb.AppendLine("END");
                    sb.AppendLine("CLOSE cur_showfragmentation");
                    sb.AppendLine("DEALLOCATE cur_showfragmentation");

                    using (var cmd = new SqlCommand(sb.ToString(), connMan.OpenDBConnection))
                    {
                        cmd.Connection = connMan.DBConnection;

                        // up the command timeout...
                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);

                        // run it...
                        cmd.ExecuteNonQuery();
                        return getStatsMessage;
                    }

                }
            }
            finally
            {
                getStatsMessage = string.Empty;
            }
        }
        public static string db_reindex_new()
        {
            ///VACUUM ANALYZE VERBOSE;VACUUM cannot be implemeneted within function or multiline command line string
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(reindexDb_InfoMessage);
                    using (NpgsqlCommand cmd = new NpgsqlCommand(String.Format(
                        @"REINDEX DATABASE {0};", Config.SchemaName.IsSet() ? Config.SchemaName : "public"),
                                                                 connMan.OpenDBConnection))
                    {

                        cmd.CommandType = CommandType.Text;
                        // up the command timeout...
                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);

                        // run it...
                        cmd.ExecuteNonQuery();
                        return reindexDbMessage;
                    }
                }

            }
            finally
            {
                reindexDbMessage = string.Empty;
            }
        }
예제 #17
0
        public static DataSet forum_moderatelist([NotNull] object userID, [NotNull] object boardID)
        {
            using (var connMan = new MsSqlDbConnectionManager())
            {
                using (var ds = new DataSet())
                {
                    using (var da = new SqlDataAdapter(MsSqlDbAccess.GetObjectName("category_list"), connMan.OpenDBConnection))
                    {
                        using (SqlTransaction trans = da.SelectCommand.Connection.BeginTransaction(MsSqlDbAccess.IsolationLevel))
                        {
                            da.SelectCommand.Transaction = trans;
                            da.SelectCommand.Parameters.AddWithValue("BoardID", boardID);
                            da.SelectCommand.CommandType = CommandType.StoredProcedure;
                            da.Fill(ds, MsSqlDbAccess.GetObjectName("Category"));
                            da.SelectCommand.CommandText = MsSqlDbAccess.GetObjectName("forum_moderatelist");
                            da.SelectCommand.Parameters.AddWithValue("UserID", userID);
                            da.Fill(ds, MsSqlDbAccess.GetObjectName("ForumUnsorted"));
                            DataTable dtForumListSorted = ds.Tables[MsSqlDbAccess.GetObjectName("ForumUnsorted")].Clone();
                            dtForumListSorted.TableName = MsSqlDbAccess.GetObjectName("Forum");
                            ds.Tables.Add(dtForumListSorted);
                            dtForumListSorted.Dispose();
                            forum_list_sort_basic(
                              ds.Tables[MsSqlDbAccess.GetObjectName("ForumUnsorted")],
                              ds.Tables[MsSqlDbAccess.GetObjectName("Forum")],
                              0,
                              0);
                            ds.Tables.Remove(MsSqlDbAccess.GetObjectName("ForumUnsorted"));

                            // vzrus: Remove here all forums with no reports. Would be better to do it in query...
                            // Array to write categories numbers
                            var categories = new int[ds.Tables[MsSqlDbAccess.GetObjectName("Forum")].Rows.Count];
                            int cntr = 0;

                            // We should make it before too as the colection was changed
                            ds.Tables[MsSqlDbAccess.GetObjectName("Forum")].AcceptChanges();
                            foreach (DataRow dr in ds.Tables[MsSqlDbAccess.GetObjectName("Forum")].Rows)
                            {
                                categories[cntr] = Convert.ToInt32(dr["CategoryID"]);
                                if (Convert.ToInt32(dr["ReportedCount"]) == 0 && Convert.ToInt32(dr["MessageCount"]) == 0)
                                {
                                    dr.Delete();
                                    categories[cntr] = 0;
                                }

                                cntr++;
                            }

                            ds.Tables[MsSqlDbAccess.GetObjectName("Forum")].AcceptChanges();

                            foreach (DataRow dr in ds.Tables[MsSqlDbAccess.GetObjectName("Category")].Rows)
                            {
                                bool deleteMe = true;
                                for (int i = 0; i < categories.Length; i++)
                                {
                                    // We check here if the Category is missing in the array where 
                                    // we've written categories number for each forum
                                    if (categories[i] == Convert.ToInt32(dr["CategoryID"]))
                                    {
                                        deleteMe = false;
                                    }
                                }

                                if (deleteMe)
                                {
                                    dr.Delete();
                                }
                            }

                            ds.Tables[MsSqlDbAccess.GetObjectName("Category")].AcceptChanges();

                            ds.Relations.Add(
                              "FK_Forum_Category",
                              ds.Tables[MsSqlDbAccess.GetObjectName("Category")].Columns["CategoryID"],
                              ds.Tables[MsSqlDbAccess.GetObjectName("Forum")].Columns["CategoryID"]);

                            trans.Commit();
                        }

                        return ds;
                    }
                }
            }
        }
        /// <summary>
        /// The db_runsql.
        /// </summary>
        /// <param name="sql">
        /// The sql.
        /// </param>
        /// <param name="connectionManager">
        /// The conn man.
        /// </param>
        /// <param name="useTransaction">
        /// The use Transaction.
        /// </param>
        /// <returns>
        /// The db_runsql.
        /// </returns>
        public static string db_runsql_new( [NotNull] string sql, bool useTransaction)
        {
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(runSql_InfoMessage);
                    sql = MsSqlDbAccess.GetCommandTextReplaced(sql.Trim());

                   var results = new System.Text.StringBuilder();

                    using (var cmd = new NpgsqlCommand(sql, connMan.OpenDBConnection))
                    {
                        cmd.CommandTimeout = 9999;
                        NpgsqlDataReader reader = null;
                        var trans = useTransaction ? cmd.Connection.BeginTransaction(MsSqlDbAccess.IsolationLevel)
                                                                   : null;

                            try
                            {
                                cmd.Connection = connMan.DBConnection;
                                cmd.Transaction = trans;
                                reader = cmd.ExecuteReader();

                                if (reader.HasRows)
                                {
                                    int rowIndex = 1;

                                    results.Append("RowNumber");
                                    int gg = 0;
                                    var columnNames = new string[reader.GetSchemaTable().Rows.Count - 1];
                                    foreach (DataRow drd in reader.GetSchemaTable().Rows)
                                    {
                                        columnNames[gg] = drd["ColumnName"].ToString();
                                        results.Append(",");
                                        results.Append(drd["ColumnName"].ToString());
                                        gg++;

                                    }
                                    //   var columnNames = reader.GetSchemaTable().Rows.Cast<DataRow>().Select(r => r["ColumnName"].ToString()).ToList();

                                    results.AppendLine();

                                    while (reader.Read())
                                    {
                                        results.AppendFormat(@"""{0}""", rowIndex++);

                                        // dump all columns...
                                        foreach (var col in columnNames)
                                        {
                                            results.AppendFormat(@",""{0}""", reader[col].ToString().Replace("\"", "\"\""));
                                        }

                                        results.AppendLine();
                                    }
                                }
                                else if (reader.RecordsAffected > 0)
                                {
                                    results.AppendFormat("{0} Record(s) Affected", reader.RecordsAffected);
                                    results.AppendLine();
                                }
                                else
                                {
                                    if (messageRunSql.IsSet())
                                    {
                                        results.AppendLine(messageRunSql);
                                        results.AppendLine();
                                    }
                                    results.AppendLine("No Results Returned.");
                                }

                                reader.Close();
                                trans.Commit();
                            }
                            catch (Exception x)
                            {
                                if (reader != null)
                                {
                                    reader.Close();
                                }

                                // rollback...
                                trans.Rollback();
                                results.AppendLine();
                                results.AppendFormat("SQL ERROR: {0}", x);
                            }

                            return results.ToString();

                    }
                }
            }
            finally
            {
                messageRunSql = string.Empty;
            }
        }
예제 #19
0
        /// <summary>
        /// The set profile properties.
        /// </summary>
        /// <param name="appName">
        /// The app name.
        /// </param>
        /// <param name="userID">
        /// The user id.
        /// </param>
        /// <param name="values">
        /// The values.
        /// </param>
        /// <param name="settingsColumnsList">
        /// The settings columns list.
        /// </param>
        public static void SetProfileProperties([NotNull] int boardId, [NotNull] object appName, [NotNull] int userID, [NotNull] SettingsPropertyValueCollection values, [NotNull] List<SettingsPropertyColumn> settingsColumnsList, bool dirtyOnly)
        {
            string userName = string.Empty;
            var dtu =  LegacyDb.UserList(boardId, userID, true, null, null, true);
            foreach (var typedUserList in dtu)
            {
                userName = typedUserList.Name;
                break;

            }
            if (userName.IsNotSet())
            {
                return;
            }
            using ( var conn = new MsSqlDbConnectionManager().OpenDBConnection)
            {
                var cmd = new SqlCommand();

                cmd.Connection = conn;
                
                string table = MsSqlDbAccess.GetObjectName("UserProfile");
                StringBuilder sqlCommand = new StringBuilder("IF EXISTS (SELECT 1 FROM ").Append(table);
                sqlCommand.Append(" WHERE UserId = @UserID AND ApplicationName = @ApplicationName) ");
                cmd.Parameters.AddWithValue("@UserID", userID);
                cmd.Parameters.AddWithValue("@ApplicationName", appName);

                // Build up strings used in the query
                var columnStr = new StringBuilder();
                var valueStr = new StringBuilder();
                var setStr = new StringBuilder();
                int count = 0;

                foreach (SettingsPropertyColumn column in settingsColumnsList)
                {
                    // only write if it's dirty
                    if (!dirtyOnly || values[column.Settings.Name].IsDirty)
                    {
                        columnStr.Append(", ");
                        valueStr.Append(", ");
                        columnStr.Append(column.Settings.Name);
                        string valueParam = "@Value" + count;
                        valueStr.Append(valueParam);
                        cmd.Parameters.AddWithValue(valueParam, values[column.Settings.Name].PropertyValue);

                        if ((column.DataType != SqlDbType.Timestamp) || column.Settings.Name != "LastUpdatedDate" || column.Settings.Name != "LastActivity")
                        {
                            if (count > 0)
                            {
                                setStr.Append(",");
                            }

                            setStr.Append(column.Settings.Name);
                            setStr.Append("=");
                            setStr.Append(valueParam);
                        }

                        count++;
                    }
                }

                columnStr.Append(",LastUpdatedDate ");
                valueStr.Append(",@LastUpdatedDate");
                setStr.Append(",LastUpdatedDate=@LastUpdatedDate");
                cmd.Parameters.AddWithValue("@LastUpdatedDate", DateTime.UtcNow);

                // MembershipUser mu = System.Web.Security.Membership.GetUser(userID);

                columnStr.Append(",LastActivity ");
                valueStr.Append(",@LastActivity");
                setStr.Append(",LastActivity=@LastActivity");
                cmd.Parameters.AddWithValue("@LastActivity", DateTime.UtcNow);

                columnStr.Append(",ApplicationName ");
                valueStr.Append(",@ApplicationName");
                setStr.Append(",ApplicationName=@ApplicationName");
                // cmd.Parameters.AddWithValue("@ApplicationID", appId);

                columnStr.Append(",IsAnonymous ");
                valueStr.Append(",@IsAnonymous");
                setStr.Append(",IsAnonymous=@IsAnonymous");
                cmd.Parameters.AddWithValue("@IsAnonymous", 0);

                columnStr.Append(",UserName ");
                valueStr.Append(",@UserName");
                setStr.Append(",UserName=@UserName");
                cmd.Parameters.AddWithValue("@UserName", userName);

                sqlCommand.Append("BEGIN UPDATE ").Append(table).Append(" SET ").Append(setStr.ToString());
                sqlCommand.Append(" WHERE UserId = ").Append(userID.ToString()).Append("");

                sqlCommand.Append(" END ELSE BEGIN INSERT ").Append(table).Append(" (UserId").Append(columnStr.ToString());
                sqlCommand.Append(") VALUES (").Append(userID.ToString()).Append("").Append(valueStr.ToString()).Append(
                  ") END");

                cmd.CommandText = sqlCommand.ToString();
                cmd.CommandType = CommandType.Text;

                cmd.ExecuteNonQuery();
            }
        }
        /// <summary>
        /// Gets a list of categories????
        /// </summary>
        /// <param name="boardId">BoardID</param>
        /// <returns>DataSet with categories</returns>
        public static DataSet ds_forumadmin( object boardId)
        {
            using (MsSqlDbConnectionManager connMan = new MsSqlDbConnectionManager())
            {
                using ( DataSet ds = new DataSet() )
                {
                    using ( NpgsqlTransaction trans = connMan.OpenDBConnection.BeginTransaction( MsSqlDbAccess.IsolationLevel ) )
                    {
                        using (NpgsqlDataAdapter da = new NpgsqlDataAdapter(MsSqlDbAccess.GetObjectName("category_list"), connMan.DBConnection))
                        {
                            da.SelectCommand.Transaction = trans;

                            da.SelectCommand.Parameters.Add(new NpgsqlParameter("i_boardid", NpgsqlDbType.Integer)).Value = boardId;
                            da.SelectCommand.Parameters.Add(new NpgsqlParameter("i_CategoryID", NpgsqlDbType.Integer)).Value = DBNull.Value;

                            da.SelectCommand.CommandType = CommandType.StoredProcedure;
                            da.Fill( ds, MsSqlDbAccess.GetObjectName( "Category" ) );
                            da.SelectCommand.CommandText = MsSqlDbAccess.GetObjectName( "forum_list" );
                            da.Fill( ds, MsSqlDbAccess.GetObjectName( "ForumUnsorted" ) );
                            DataTable dtForumListSorted = ds.Tables [MsSqlDbAccess.GetObjectName( "ForumUnsorted" )].Clone();
                            dtForumListSorted.TableName = MsSqlDbAccess.GetObjectName( "Forum" );
                            ds.Tables.Add( dtForumListSorted );
                            dtForumListSorted.Dispose();
                            LegacyDb.forum_list_sort_basic( ds.Tables[MsSqlDbAccess.GetObjectName("ForumUnsorted")], ds.Tables[MsSqlDbAccess.GetObjectName("Forum")], 0, 0);
                            ds.Tables.Remove( MsSqlDbAccess.GetObjectName( "ForumUnsorted" ) );
                            ds.Relations.Add( "FK_Forum_Category", ds.Tables [MsSqlDbAccess.GetObjectName( "Category" )].Columns ["CategoryID"], ds.Tables [MsSqlDbAccess.GetObjectName( "Forum" )].Columns ["CategoryID"] );
                            trans.Commit();
                        }

                        return ds;
                    }
                }
            }
        }
예제 #21
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        /// <summary>
        /// The db_recovery_mode.
        /// </summary>
        /// <param name="DBName">
        /// The db name.
        /// </param>
        /// <param name="dbRecoveryMode">
        /// The db recovery mode.
        /// </param>
        public static string db_recovery_mode_new([NotNull] string dbRecoveryMode)
        {
            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(recoveryDbMode_InfoMessage);
                    var RecoveryModeConn = new SqlConnection(Config.ConnectionString);
                    RecoveryModeConn.Open();
                   
                    string RecoveryMode = "ALTER DATABASE " + connMan.DBConnection.Database + " SET RECOVERY " + dbRecoveryMode;
                    var RecoveryModeCmd = new SqlCommand(RecoveryMode, RecoveryModeConn);
                   
                    RecoveryModeCmd.ExecuteNonQuery();
                    RecoveryModeConn.Close();
                    using (var cmd = new SqlCommand(RecoveryMode, connMan.OpenDBConnection))
                    {
                        cmd.Connection = connMan.DBConnection;
                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);
                        cmd.ExecuteNonQuery();
                        return recoveryDbModeMessage;
                    }

                }
            }
            catch (Exception error)
            {
                string expressDb = string.Empty;
                if (error.Message.ToUpperInvariant().Contains("'SET'"))
                {
                    expressDb = "MS SQL Server Express Editions are not supported by the application.";
                }
                recoveryDbModeMessage += "\r\n{0}\r\n{1}".FormatWith(error.Message, expressDb);
                return recoveryDbModeMessage;
            }
           
            finally
            {
                recoveryDbModeMessage = string.Empty;
            }

            
            
        }
        public static bool forumpage_initdb( out string errorStr, bool debugging)
        {
            errorStr = null;
            try
            {
                using (YAF.Classes.Data.MsSqlDbConnectionManager connMan = new MsSqlDbConnectionManager())
                {                    // just attempt to open the connection to test if a DB is available.
                    NpgsqlConnection getConn = connMan.OpenDBConnection;
                }
                return true;
            }

            catch (Npgsql.NpgsqlException ex)
            {
                // unable to connect to the LegacyDb...
                if (debugging)
                {
                    errorStr = "Unable to connect to the Database. Exception Message: " +
                        ex.Message +
                        " (" + ex.Code.ToString()
                        + ")";

                }
                else
                {
                    // re-throw since we are debugging...

                    throw;
                }

                return false;
            }
        }
예제 #23
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        /// <summary>
        /// The db_runsql.
        /// </summary>
        /// <param name="sql">
        /// The sql.
        /// </param>
        /// <param name="connectionManager">
        /// The conn man.
        /// </param>
        /// <param name="useTransaction">
        /// The use Transaction.
        /// </param>
        /// <returns>
        /// The db_runsql.
        /// </returns>
        public static string db_runsql_new([NotNull] string sql, bool useTransaction)
        {

            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    connMan.InfoMessage += new YafDBConnInfoMessageEventHandler(runSql_InfoMessage);
                    connMan.DBConnection.FireInfoMessageEventOnUserErrors = true;
                    sql = DbHelpers.GetCommandTextReplaced(sql.Trim());

                    using (var command = new SqlCommand(sql, connMan.OpenDBConnection))
                    {
                        command.CommandTimeout = 9999;
                        command.Connection = connMan.OpenDBConnection;

                        return InnerRunSqlExecuteReader(command, useTransaction);
                    }
                }
            }
            finally
            {
                messageRunSql = string.Empty;
            }
  
           
        }
        /// <summary>
        /// The set profile properties.
        /// </summary>
        /// <param name="appName">
        /// The app name.
        /// </param>
        /// <param name="userID">
        /// The user id.
        /// </param>
        /// <param name="values">
        /// The values.
        /// </param>
        /// <param name="settingsColumnsList">
        /// The settings columns list.
        /// </param>
        public static void SetProfileProperties( [NotNull] int boardId, [NotNull] object appName, [NotNull] int userID, [NotNull] SettingsPropertyValueCollection values, [NotNull] List<SettingsPropertyColumn> settingsColumnsList, bool dirtyOnly)
        {
            string userName = string.Empty;
            var dtu = LegacyDb.UserList(boardId, userID, true, null, null, true);
            foreach (var typedUserList in dtu)
            {
                userName = typedUserList.Name;
                break;

            }
            if (userName.IsNotSet())
            {
                return;
            }
            using (var conn = new MsSqlDbConnectionManager().OpenDBConnection)
            {
                var cmd = new NpgsqlCommand();

                cmd.Connection = conn;

                string table = MsSqlDbAccess.GetObjectName("UserProfile");
                StringBuilder sqlCommand = new StringBuilder("SELECT 1 FROM ").Append(table);
                sqlCommand.Append(" WHERE UserID = :UserID AND ApplicationName = :ApplicationName");
                cmd.Parameters.Add("UserID",NpgsqlDbType.Integer).Value= userID;
                cmd.Parameters.Add("ApplicationName", NpgsqlDbType.Varchar).Value = appName;
                cmd.CommandText = sqlCommand.ToString();
                cmd.CommandType = CommandType.Text;

                object o = cmd.ExecuteScalar();
                int dd;

                // Build up strings used in the query
                var columnStr = new StringBuilder();
                var valueStr = new StringBuilder();
                var setStr = new StringBuilder();
                int count = 0;

                foreach (SettingsPropertyColumn column in settingsColumnsList)
                {
                    // only write if it's dirty
                    if (!dirtyOnly || values[column.Settings.Name].IsDirty)
                    {
                        columnStr.Append(", ");
                        valueStr.Append(", ");
                        columnStr.Append(column.Settings.Name);
                        string valueParam = ":Value" + count;
                        valueStr.Append(valueParam);
                        cmd.Parameters.Add(valueParam, column.DataType).Value = values[column.Settings.Name].PropertyValue;
                        if ((column.DataType != NpgsqlDbType.Timestamp) || column.Settings.Name != "LastUpdatedDate" || column.Settings.Name != "LastActivity")
                        {
                            if (count > 0)
                            {
                                setStr.Append(",");
                            }

                            setStr.Append(column.Settings.Name);
                            setStr.Append("=");
                            setStr.Append(valueParam);
                        }
                        else
                        {

                        }

                        count++;
                    }
                }

                columnStr.Append(",LastUpdatedDate ");
                valueStr.Append(",:LastUpdatedDate");
                setStr.Append(",LastUpdatedDate=:LastUpdatedDate");
                cmd.Parameters.Add("LastUpdatedDate",NpgsqlDbType.TimestampTZ).Value = DateTime.UtcNow;

                // MembershipUser mu = System.Web.Security.Membership.GetUser(userID);

                columnStr.Append(",LastActivity ");
                valueStr.Append(",:LastActivity");
                setStr.Append(",LastActivity=:LastActivity");
                cmd.Parameters.Add("LastActivity", NpgsqlDbType.TimestampTZ).Value = DateTime.UtcNow;

                columnStr.Append(",ApplicationName ");
                valueStr.Append(",:ApplicationName");
                setStr.Append(",ApplicationName=:ApplicationName");

                columnStr.Append(",IsAnonymous ");
                valueStr.Append(",:IsAnonymous");
                setStr.Append(",IsAnonymous=:IsAnonymous");
                cmd.Parameters.AddWithValue("IsAnonymous", 0);
                cmd.Parameters.Add("IsAnonymous", NpgsqlDbType.Boolean).Value = false;

                columnStr.Append(",UserName ");
                valueStr.Append(",:UserName");
                setStr.Append(",UserName=:UserName");
                cmd.Parameters.Add("UserName",NpgsqlDbType.Varchar).Value = userName;
                // the user  exists.
                sqlCommand.Clear();
                if (o != null && int.TryParse(o.ToString(), out dd))
                {
                    sqlCommand.Append("UPDATE ").Append(table).Append(" SET ").Append(setStr.ToString());
                    sqlCommand.Append(" WHERE UserID = ").Append(userID.ToString()).Append("");
                }
                else
                {
                    sqlCommand.Append("INSERT INTO ").Append(table).Append(" (UserID").Append(columnStr.ToString());
                    sqlCommand.Append(") VALUES (").Append(userID.ToString()).Append("").Append(valueStr.ToString()).Append(
                      ")");
                }

                cmd.CommandText = sqlCommand.ToString();
                cmd.CommandType = CommandType.Text;

                cmd.ExecuteNonQuery();
            }
        }
예제 #25
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        public static DataSet ds_forumadmin([NotNull] object boardID)
        {
            // TODO: this function is TERRIBLE. Recode or remove completely.
            using (var connMan = new MsSqlDbConnectionManager())
            {
                using (var ds = new DataSet())
                {
                    using (var trans = connMan.OpenDBConnection.BeginTransaction())
                    {
                        using (var da = new SqlDataAdapter(DbHelpers.GetObjectName("category_list"), connMan.DBConnection))
                        {
                            da.SelectCommand.Transaction = trans;
                            da.SelectCommand.AddParam("BoardID", boardID);
                            da.SelectCommand.CommandType = CommandType.StoredProcedure;
                            da.Fill(ds, DbHelpers.GetObjectName("Category"));
                            da.SelectCommand.CommandText = DbHelpers.GetObjectName("forum_list");
                            da.Fill(ds, DbHelpers.GetObjectName("ForumUnsorted"));

                            DataTable dtForumListSorted = ds.Tables[DbHelpers.GetObjectName("ForumUnsorted")].Clone();
                            dtForumListSorted.TableName = DbHelpers.GetObjectName("Forum");
                            ds.Tables.Add(dtForumListSorted);
                            dtForumListSorted.Dispose();
                            forum_list_sort_basic(
                              ds.Tables[DbHelpers.GetObjectName("ForumUnsorted")],
                              ds.Tables[DbHelpers.GetObjectName("Forum")],
                              0,
                              0);
                            ds.Tables.Remove(DbHelpers.GetObjectName("ForumUnsorted"));
                            ds.Relations.Add(
                              "FK_Forum_Category",
                              ds.Tables[DbHelpers.GetObjectName("Category")].Columns["CategoryID"],
                              ds.Tables[DbHelpers.GetObjectName("Forum")].Columns["CategoryID"]);
                            trans.Commit();
                        }

                        return ds;
                    }
                }
            }
        }
        public static void system_initialize_executescripts(string script, string scriptFile, bool useTransactions)
        {
            script = MsSqlDbAccess.GetCommandTextReplaced(script);

            //Scripts separation regexp
                string[] statements = System.Text.RegularExpressions.Regex.Split(script, "(?:--GO)", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

                using (var connMan = new MsSqlDbConnectionManager())
            {

                // use transactions...
                if (useTransactions)
                {
                    using (NpgsqlTransaction trans = connMan.OpenDBConnection.BeginTransaction(YAF.Classes.Data.MsSqlDbAccess.IsolationLevel))
                    {
                        foreach (string sql0 in statements)
                        {
                            string sql = sql0.Trim();

                            try
                            {
                                if (sql.ToLower().IndexOf("setuser") >= 0)
                                    continue;

                                if (sql.Length > 0)
                                {
                                    using (NpgsqlCommand cmd = new NpgsqlCommand())
                                    {
                                        cmd.Transaction = trans;
                                        cmd.Connection = connMan.DBConnection;
                                        cmd.CommandType = CommandType.Text;
                                        cmd.CommandText = sql.Trim();
                                        // added so command won't timeout anymore...
                                        cmd.CommandTimeout = int.Parse(Config.SqlCommandTimeout);
                                        cmd.ExecuteNonQuery();
                                    }
                                }
                            }
                            catch (Exception x)
                            {
                                sql = sql0;
                                trans.Rollback();
                                throw new Exception(String.Format("FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}", scriptFile, sql, x.Message));
                            }
                        }
                        trans.Commit();
                    }
                }
                else
                {
                    // don't use transactions
                    foreach (string sql0 in statements)
                    {
                        string sql = sql0.Trim();

                        try
                        {
                            if (sql.ToLower().IndexOf("setuser") >= 0)
                                continue;

                            if (sql.Length > 0)
                            {
                                using (NpgsqlCommand cmd = new NpgsqlCommand())
                                {
                                    cmd.Connection = connMan.OpenDBConnection;
                                    cmd.CommandType = CommandType.Text;
                                    cmd.CommandText = sql.Trim();
                                    cmd.ExecuteNonQuery();
                                }
                            }
                        }
                        catch (Exception x)
                        {
                            throw new Exception(String.Format("FILE:\n{0}\n\nERROR:\n{2}\n\nSTATEMENT:\n{1}", scriptFile, sql, x.Message));
                        }
                    }
                }
            }
        }
예제 #27
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        /// <summary>
        /// The forumpage_initdb.
        /// </summary>
        /// <param name="errorStr">
        /// The error str.
        /// </param>
        /// <param name="debugging">
        /// The debugging.
        /// </param>
        /// <returns>
        /// The forumpage_initdb.
        /// </returns>
        public static bool forumpage_initdb([NotNull] out string errorStr, bool debugging)
        {
            errorStr = string.Empty;

            try
            {
                using (var connMan = new MsSqlDbConnectionManager())
                {
                    // just attempt to open the connection to test if a DB is available.
                    SqlConnection getConn = connMan.OpenDBConnection;
                }
            }
            catch (SqlException ex)
            {
                // unable to connect to the DB...
                if (!debugging)
                {
                    errorStr = "Unable to connect to the Database. Exception Message: " + ex.Message + " (" + ex.Number + ")";
                    return false;
                }

                // re-throw since we are debugging...
                throw;
            }

            return true;
        }
        public static bool user_register( object boardId, object userName, object password, object hash, object email, object location, object homePage, object timeZone, bool approved)
        {
            using (MsSqlDbConnectionManager connMan = new MsSqlDbConnectionManager())
            {
                using (NpgsqlTransaction trans = connMan.OpenDBConnection.BeginTransaction(MsSqlDbAccess.IsolationLevel))
                {
                    try
                    {
                        using (NpgsqlCommand cmd = MsSqlDbAccess.GetCommand("user_save", connMan.OpenDBConnection))
                        {
                            cmd.Transaction = trans;
                            cmd.CommandType = CommandType.StoredProcedure;

                            cmd.Parameters.Add(new NpgsqlParameter("i_userid", NpgsqlDbType.Integer)).Value = DBNull.Value;
                            cmd.Parameters.Add(new NpgsqlParameter("i_boardid", NpgsqlDbType.Integer)).Value = boardId;
                            cmd.Parameters.Add(new NpgsqlParameter("i_username", NpgsqlDbType.Varchar)).Value = userName;
                            cmd.Parameters.Add(new NpgsqlParameter("i_email", NpgsqlDbType.Varchar)).Value = email;
                            cmd.Parameters.Add(new NpgsqlParameter("i_timezone", NpgsqlDbType.Integer)).Value = timeZone;
                            cmd.Parameters.Add(new NpgsqlParameter("i_languagefile", NpgsqlDbType.Varchar)).Value = DBNull.Value;
                            cmd.Parameters.Add(new NpgsqlParameter("i_themefile", NpgsqlDbType.Varchar)).Value = DBNull.Value;
                            cmd.Parameters.Add(new NpgsqlParameter("i_overridedefaulttheme", NpgsqlDbType.Boolean)).Value = false;
                            cmd.Parameters.Add(new NpgsqlParameter("i_approved", NpgsqlDbType.Boolean)).Value = approved;
                            cmd.Parameters.Add(new NpgsqlParameter("i_pmnotification", NpgsqlDbType.Boolean)).Value = false;
                            cmd.Parameters.Add(new NpgsqlParameter("i_provideruserkey", NpgsqlDbType.Varchar)).Value = DBNull.Value;
                            cmd.Parameters.Add(new NpgsqlParameter("i_utctimestamp", NpgsqlDbType.TimestampTZ)).Value = DateTime.UtcNow;

                            cmd.ExecuteNonQuery();
                        }

                        trans.Commit();
                    }
                    catch (Exception x)
                    {
                        trans.Rollback();
                        eventlog_create(null, "user_register in YAF.Classes.Data.LegacyDb.cs", x, EventLogTypes.Error);
                        return false;
                    }
                }
            }

            return true;
        }
예제 #29
0
파일: LegacyDb.cs 프로젝트: RH-Code/YAFNET
        /// <summary>
        /// The system_initialize_fixaccess.
        /// </summary>
        /// <param name="grant">
        /// The grant.
        /// </param>
        public static void system_initialize_fixaccess(bool grant)
        {
            using (var connMan = new MsSqlDbConnectionManager())
            {
                using (SqlTransaction trans = connMan.OpenDBConnection.BeginTransaction())
                {
                    // REVIEW : Ederon - would "{databaseOwner}.{objectQualifier}" work, might need only "{objectQualifier}"
                    using (
                      var da =
                        new SqlDataAdapter(
                          "select Name,IsUserTable = OBJECTPROPERTY(id, N'IsUserTable'),IsScalarFunction = OBJECTPROPERTY(id, N'IsScalarFunction'),IsProcedure = OBJECTPROPERTY(id, N'IsProcedure'),IsView = OBJECTPROPERTY(id, N'IsView') from dbo.sysobjects where Name like '{databaseOwner}.{objectQualifier}%'",
                          connMan.OpenDBConnection))
                    {
                        da.SelectCommand.Transaction = trans;
                        using (var dt = new DataTable("sysobjects"))
                        {
                            da.Fill(dt);
                            using (var cmd = connMan.DBConnection.CreateCommand())
                            {
                                cmd.Transaction = trans;
                                cmd.CommandType = CommandType.Text;
                                cmd.CommandText = "select current_user";
                                var userName = (string)cmd.ExecuteScalar();

                                if (grant)
                                {
                                    cmd.CommandType = CommandType.Text;
                                    foreach (DataRow row in dt.Select("IsProcedure=1 or IsScalarFunction=1"))
                                    {
                                        cmd.CommandText = "grant execute on \"{0}\" to \"{1}\"".FormatWith(row["Name"], userName);
                                        cmd.ExecuteNonQuery();
                                    }

                                    foreach (DataRow row in dt.Select("IsUserTable=1 or IsView=1"))
                                    {
                                        cmd.CommandText = "grant select,update on \"{0}\" to \"{1}\"".FormatWith(row["Name"], userName);
                                        cmd.ExecuteNonQuery();
                                    }
                                }
                                else
                                {
                                    cmd.CommandText = "sp_changeobjectowner";
                                    cmd.CommandType = CommandType.StoredProcedure;
                                    foreach (DataRow row in dt.Select("IsUserTable=1"))
                                    {
                                        cmd.Parameters.Clear();
                                        cmd.AddParam("@objname", row["Name"]);
                                        cmd.AddParam("@newowner", "dbo");
                                        try
                                        {
                                            cmd.ExecuteNonQuery();
                                        }
                                        catch (SqlException)
                                        {
                                        }
                                    }

                                    foreach (DataRow row in dt.Select("IsView=1"))
                                    {
                                        cmd.Parameters.Clear();
                                        cmd.AddParam("@objname", row["Name"]);
                                        cmd.AddParam("@newowner", "dbo");
                                        try
                                        {
                                            cmd.ExecuteNonQuery();
                                        }
                                        catch (SqlException)
                                        {
                                        }
                                    }
                                }
                            }
                        }
                    }

                    trans.Commit();
                }
            }
        }
        /// <summary>
        /// The method saves many questions and answers to them in a single transaction 
        /// </summary>
        /// <param name="pollList">List to hold all polls data</param>
        /// <returns>Last saved poll id.</returns>
        public static int? poll_save(
            [NotNull] System.Collections.Generic.List<PollSaveList> pollList)
        {
            foreach (PollSaveList question in pollList)
            {
             var sb = new System.Text.StringBuilder();
             var paramSb = new System.Text.StringBuilder("EXECUTE BLOCK (");
              sb.Append(" RETURNS(OUT_POLLGROUPID INTEGER) AS  DECLARE VARIABLE OUT_POLLID INTEGER;  BEGIN ");
                            // Check if the group already exists

              if (question.CategoryId > 0)
              {

                  sb.Append("SELECT POLLGROUPID  FROM ");
                  sb.Append(MsSqlDbAccess.GetObjectName("CATEGORY"));
                  sb.Append(" WHERE CATEGORYID = :I_CATEGORYID INTO :OUT_POLLGROUPID; ");
                  paramSb.Append("I_CATEGORYID INTEGER = ?,");
              }
              if (question.ForumId > 0)
              {

                  sb.Append("SELECT POLLGROUPID  FROM ");
                  sb.Append(MsSqlDbAccess.GetObjectName("FORUM"));
                  sb.Append(" WHERE FORUMID = :I_FORUMID INTO :OUT_POLLGROUPID; ");
                  paramSb.Append("I_FORUMID INTEGER = ?,");
              }

            if (question.TopicId > 0)
               {
               sb.Append(" SELECT POLLID FROM ");
               sb.Append(MsSqlDbAccess.GetObjectName("TOPIC"));
               sb.Append(" WHERE TOPICID = :I_TOPICID INTO :OUT_POLLGROUPID; ");
               paramSb.Append("I_TOPICID INTEGER = ?,");
               }

              // if the poll group doesn't exists, create a new one
            sb.Append("IF (OUT_POLLGROUPID IS NULL) THEN BEGIN ");

               sb.Append("INSERT INTO ");
               sb.Append(MsSqlDbAccess.GetObjectName("POLLGROUPCLUSTER"));
               sb.AppendFormat("(POLLGROUPID, USERID, FLAGS) VALUES((SELECT NEXT VALUE FOR SEQ_{0}PGC_POLLGROUPID FROM RDB$DATABASE), :GROUPUSERID, :POLLGROUPFLAGS) RETURNING POLLGROUPID INTO :OUT_POLLGROUPID;  END ", MsSqlDbAccess.ObjectQualifier.ToUpper());

               paramSb.Append("GROUPUSERID INTEGER = ?,");
               paramSb.Append("POLLGROUPFLAGS INTEGER = ?,");
               if (question.CategoryId > 0)
               {
               sb.Append("UPDATE ");
               sb.Append(MsSqlDbAccess.GetObjectName("CATEGORY"));
               sb.Append(" SET POLLGROUPID = :OUT_POLLGROUPID WHERE CATEGORYID = :I_CATEGORYID; ");

               }
               if (question.ForumId > 0)
               {
               sb.Append("UPDATE ");
               sb.Append(MsSqlDbAccess.GetObjectName("FORUM"));
               sb.Append(" SET POLLGROUPID = :OUT_POLLGROUPID WHERE FORUMID = :I_FORUMID; ");
               }

               if (question.TopicId > 0)
               {
               sb.Append("UPDATE ");
               sb.Append(MsSqlDbAccess.GetObjectName("TOPIC"));
               sb.Append(" SET POLLID = :OUT_POLLGROUPID WHERE TOPICID = :I_TOPICID; ");
               }

                // System.Text.StringBuilder paramSb = new System.Text.StringBuilder("EXECUTE BLOCK (");
            // INSERT in poll
                sb.Append(" INSERT INTO ");
                sb.Append(MsSqlDbAccess.GetObjectName("POLL"));
                if (question.Closes > DateTime.MinValue)
                {

                    sb.Append("(POLLID,QUESTION, USERID, CLOSES,POLLGROUPID,FLAGS");
                }
                else
                {
                    sb.Append("(POLLID,QUESTION, USERID,POLLGROUPID,FLAGS");
                }

                if (question.QuestionObjectPath.IsSet())
                {
                    sb.Append(", OBJECTPATH");
                }
                if (question.QuestionMimeType.IsSet())
                {
                    sb.Append(", MIMETYPE");
                }
                sb.Append(") VALUES(");

                sb.AppendFormat("(SELECT NEXT VALUE FOR SEQ_{0}POLL_POLLID FROM RDB$DATABASE),", MsSqlDbAccess.ObjectQualifier.ToUpper());
                sb.Append(":QUESTION");

                paramSb.Append(" QUESTION VARCHAR(255) = ?,");

                sb.Append(",:USERID");
                paramSb.Append("USERID INTEGER = ?,");

                if (question.Closes > DateTime.MinValue)
                {
                    sb.Append(",:CLOSES");
                    paramSb.Append("CLOSES TIMESTAMP = ?,");
                }
                sb.Append(",:OUT_POLLGROUPID");

                sb.Append(",:FLAGS");
                paramSb.Append("FLAGS INTEGER = ?,");
                if (question.QuestionObjectPath.IsSet())
                {
                    sb.Append(",:QUESTIONOBJECTPATH");
                    paramSb.Append("OBJECTPATH VARCHAR(255) = ?,");
                }
                if (question.QuestionMimeType.IsSet())
                {
                    sb.Append(",:QUESTIONMIMETYPE");
                    paramSb.Append("MIMETYPE VARCHAR(50) = ?,");
                }

                sb = new StringBuilder(sb.ToString().TrimEnd(','));
                sb.Append(") RETURNING POLLID INTO :OUT_POLLID; ");

                // The cycle through question reply choices to create prepare statement

                // The cycle through question reply choices
                for (uint choiceCount = 0; choiceCount < question.Choice.GetLength(0); choiceCount++)
                {
                    if (!string.IsNullOrEmpty(question.Choice[0, choiceCount]))
                    {

                        sb.Append("INSERT INTO ");
                        sb.Append(MsSqlDbAccess.GetObjectName("CHOICE"));

                        sb.Append("(CHOICEID, POLLID,CHOICE,VOTES");
                        if (question.QuestionObjectPath.IsSet())
                        {
                            sb.Append(",OBJECTPATH");
                        }
                        if (question.QuestionMimeType.IsSet())
                        {
                            sb.Append(",MIMETYPE");
                        }
                        sb.Append(") VALUES(");
                        sb.AppendFormat("(SELECT NEXT VALUE FOR SEQ_{0}CHOICE_CHOICEID FROM RDB$DATABASE),",
                                        MsSqlDbAccess.ObjectQualifier.ToUpper());
                        sb.AppendFormat(":OUT_POLLID,:CHOICE{0},:VOTES{0}", choiceCount);
                        if (question.QuestionObjectPath.IsSet())
                        {
                            sb.AppendFormat(",:CHOICEOBJECTPATH{0}", choiceCount);
                        }
                        if (question.QuestionMimeType.IsSet())
                        {
                            sb.AppendFormat(",:CHOICEMIMETYPE{0}", choiceCount);
                        }
                        sb.Append("); ");
                        paramSb.AppendFormat("CHOICE{0} VARCHAR(255) = ?,", choiceCount);
                        paramSb.AppendFormat("VOTES{0} INTEGER = ?,", choiceCount);

                        if (question.QuestionObjectPath.IsSet())
                        {
                            paramSb.AppendFormat("CHOICEOBJECTPATH{0} VARCHAR(255) = ?,", choiceCount);
                        }
                        if (question.QuestionMimeType.IsSet())
                        {
                            paramSb.AppendFormat("CHOICEMIMETYPE{0} VARCHAR(50) = ?,", choiceCount);
                        }

                    }

                }

               sb.Append(" SUSPEND; END;");
               FbCommand cmd = new FbCommand();
               cmd.CommandText =  paramSb.ToString().TrimEnd(',') + ") " + sb.ToString();
               MsSqlDbConnectionManager connMan = new MsSqlDbConnectionManager();
                FbConnection con = connMan.OpenDBConnection;
                FbTransaction trans = con.BeginTransaction(MsSqlDbAccess.IsolationLevel);

               cmd.Transaction = trans;
              // cmd.Prepare();
                     /* FbParameter ret = new FbParameter();
                     ret.ParameterName = "@OUT_POLLID";
                     ret.FbDbType = FbDbType.Integer;
                     ret.Direction = ParameterDirection.Output;
                     cmd.Parameters.Add(ret); */
               object categoryId = DBNull.Value;
               object forumId = DBNull.Value;
               object topicId = DBNull.Value;
               if (question.CategoryId > 0)
               {
                   cmd.Parameters.Add(new FbParameter("I_CATEGORYID", FbDbType.Integer)).Value = question.CategoryId ??
                                                                                                 categoryId;
               }
               if (question.ForumId > 0)
               {
                   cmd.Parameters.Add(new FbParameter("I_FORUMID", FbDbType.Integer)).Value = question.ForumId ??
                                                                                              forumId;
               }
               if (question.TopicId > 0)
               {
                   cmd.Parameters.Add(new FbParameter("I_TOPICID", FbDbType.Integer)).Value = question.TopicId ??
                                                                                              topicId;
               }
               cmd.Parameters.Add(new FbParameter("GROUPUSERID", FbDbType.Integer)).Value = question.UserId;
               int pollGroupFlags = question.IsBound
              ? 0 | 2
               : 0;
               cmd.Parameters.Add(new FbParameter("POLLGROUPFLAGS", FbDbType.Integer)).Value = pollGroupFlags;
                cmd.Parameters.Add(new FbParameter("QUESTION", FbDbType.VarChar)).Value = question.Question;
                cmd.Parameters.Add(new FbParameter("USERID", FbDbType.Integer)).Value = question.UserId;

                    if (question.Closes > DateTime.MinValue)
                    {
                        cmd.Parameters.Add(new FbParameter("CLOSES", FbDbType.TimeStamp)).Value = question.Closes;
                    }

            // set poll  flags
            int pollFlags = 0;
            if (question.IsClosedBound)
            {
                pollFlags = pollFlags | 4;
            }
            if (question.AllowMultipleChoices)
            {
                pollFlags = pollFlags | 8;
            }
            if (question.ShowVoters)
            {
                pollFlags = pollFlags | 16;
            }
            if (question.AllowSkipVote)
            {
                pollFlags = pollFlags | 32;
            }

            cmd.Parameters.Add(new FbParameter("FLAGS", FbDbType.Integer)).Value = pollFlags;
                   if (question.QuestionObjectPath.IsSet())
                   {
                       cmd.Parameters.Add(new FbParameter("QUESTIONOBJECTPATH", FbDbType.VarChar)).Value =
                           question.QuestionObjectPath;
                   }
                   if (question.QuestionMimeType.IsSet())
                   {
                       cmd.Parameters.Add(new FbParameter("QUESTIONMIMETYPE", FbDbType.VarChar)).Value =
                           question.QuestionMimeType;
                   }

                   for (uint choiceCount1 = 0; choiceCount1 < question.Choice.GetLength(0); choiceCount1++)
                    {
                        if (!string.IsNullOrEmpty(question.Choice[0,choiceCount1]))
                        {
                            cmd.Parameters.Add(new FbParameter(String.Format("CHOICE{0}", choiceCount1), FbDbType.VarChar)).Value= question.Choice[0,choiceCount1];
                            cmd.Parameters.Add(new FbParameter(String.Format("VOTES{0}", choiceCount1), FbDbType.Integer)).Value =  0;
                            if (question.Choice[1, choiceCount1].IsSet())
                            {
                                cmd.Parameters.Add(new FbParameter(String.Format("CHOICEOBJECTPATH{0}", choiceCount1), FbDbType.VarChar)).Value =
                            question.Choice[1, choiceCount1].IsNotSet() ? String.Empty : question.Choice[1, choiceCount1];
                            }
                            if (question.Choice[2,choiceCount1].IsSet())
                            {
                                cmd.Parameters.Add(new FbParameter(String.Format("CHOICEMIMETYPE{0}", choiceCount1), FbDbType.VarChar)).Value =
                            question.Choice[2, choiceCount1].IsNotSet() ? String.Empty : question.Choice[2, choiceCount1];
                            }
                        }
                    }

                // cmd.Prepare();
                int? result = Convert.ToInt32(MsSqlDbAccess.Current.ExecuteScalar(cmd, true));
                trans.Commit();
                con.Close();
                return  result;

                }
            return null;
        }