Проблема с возвратом результатов из MySql - PullRequest
0 голосов
/ 04 февраля 2011

Редактировать: я решил свою проблему, но если у вас есть что добавить, пожалуйста, сделайте. Спасибо

Примечание. Я не создавал базу данных, созданную Wordpress на GoDaddy с моим сайтом

У меня есть база данных MySql под названием «wordpress» (для ясности). Я хочу иметь возможность получить самую последнюю запись из моего блога и показать ее на целевой странице для моего URL. Поэтому моя мысль такова: подключитесь к БД MySql, запустите запрос, чтобы получить самый последний пост, отобразить пост.

Я создал класс для обработки соединения и обработки запроса:

public class DAL
    {
        private string connectionString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=[server here]; PORT=[port]; DATABASE=wordpress; 
            USER=[user name here]; PASSWORD=[password here];";
        private OdbcConnection blogConnection;

        public DAL()
        {
            blogConnection = new OdbcConnection(connectionString);
        }

        public String[] GetRecentPost()
        {
            string queryString = "SELECT * FROM RecentPost";
            String[] recentPost = new String[3];

            //ODBC
            blogConnection.Open();

            OdbcCommand MySqlDB = new OdbcCommand(queryString, blogConnection);
            OdbcDataReader reader = MySqlDB.ExecuteReader();

            while (reader.NextResult())
            {
                recentPost[0] = reader.GetString(0);
                recentPost[1] = reader.GetString(1);
            }
            recentPost[2] = reader.HasRows.ToString();
            blogConnection.Close();

            return recentPost;
        }
    }

В queryString выше RecentPost - это представление, которое я создал для упрощения queryString, так как запрос был немного длинным. Я уже знаю, вид работает. Я протестировал его, открыв phpMyAdmin из Хостинг-центра GoDaddy, и выполнил приведенный выше запрос, и я получил правильный результат, поэтому я не думаю, что запрос / представление неверны.

Код для целевой страницы:

protected void Page_Load(object sender, EventArgs e)
        {
            DAL dataAccess = new DAL();

            String[] recentPost = dataAccess.GetRecentPost();

            Title.Text = recentPost[0];
            Post.Text = recentPost[1];
            Extra.Text = recentPost[2];
        }

Поэтому, когда моя страница загружается, тексты Title и Post пусты, а Extra.Text равен False (что из DAL равно значению reader.HasRows). Так что я предполагаю, что это нормально соединяется и выполняет запрос, но, возможно, не в той базе данных? Я не знаю.

Я также пытался отладить, но мой код выдает ошибку при попытке подключения к базе данных.

Итак, мои вопросы : Видите ли вы что-то не так со строкой подключения?

Если вы не видите ничего, кроме того, что может привести к установлению соединения, выполнению запроса, без выдачи исключений, но без результатов?

Кто-нибудь с опытом пытается получить данные из своего собственного блога WordPress?

Спасибо за помощь - этот сводит меня с ума.

1 Ответ

0 голосов
/ 04 февраля 2011

Я не знаю, почему мой оригинальный код не работал, но я решил свою проблему. Для тех, у кого есть эта проблема, вот как я изменил свой код (в методе GetRecentPost) и решил свою проблему:

DataSet ds = new DataSet();

//ODBC
blogConnection.Open();

OdbcDataAdapter MySqlDB = new OdbcDataAdapter(queryString, blogConnection);
MySqlDB.Fill(ds);
return ds.Tables[0];

Так что вместо массива строк я использовал DataSet. Вместо использования OdbcDataReader я использовал OdbcDataAdapter и заполнил DataSet методом .Fill() из OdbcDataAdapter. Затем я вернул первую таблицу из DataSet в мой Page_Load метод.

Вот мой новый Page_Load():

DataTable table = dataAccess.GetRecentPost();

if (table.Rows.Count > 0)
{
    Title.Text = table.Rows[0]["title"].ToString();
    Post.Text = table.Rows[0]["content"].ToString();
}
else
    Extra.Text = table.Rows.Count.ToString(); \\if nothing was returned ouput the 0 just to be sure

Надеюсь, это поможет кому-то еще с этой проблемой

И спасибо всем, кто нашел время, чтобы посмотреть

...