Проблема с базой данных в расширенном текстовом поле - PullRequest
0 голосов
/ 30 марта 2011

У меня возникли проблемы с привязкой моих данных из базы данных Access в мое текстовое поле в форме Visual C #.Вот мой код:

private void Form2_Load(object sender, EventArgs e)

        {
            string connectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\\Documents and Settings\\Harvey\\Desktop\\Test.accdb");
            OleDbConnection conGet = new OleDbConnection(connectionString);
            OleDbCommand cmdGet = new OleDbCommand();

            try
            {
                //open connection
                conGet.Open();

                cmdGet.CommandType = CommandType.Text;
                cmdGet.Connection = conGet;
                cmdGet.CommandText = "SELECT * FROM Paragraph";

                richTextBox.Rtf = cmdGet.ExecuteScalar().ToString();

                conGet.Close();

                MessageBox.Show("Data loaded from Database");
            }
            catch (Exception ex)
            {
                //display generic error message back to user
                MessageBox.Show(ex.Message);
            }
            finally
            {
                //check if connection is still open then attempt to close it
                if (conGet.State == ConnectionState.Open)
                {
                    conGet.Close();
                }
            }
        }

Когда я нажимаю кнопку, чтобы загрузить форму, которая будет содержать поле расширенного текста, я получаю всплывающее окно с надписью «Формат файла недействителен», по существу, в моей базе данных,есть 1 столбец, в котором есть данные (1 слово в строке в этом столбце)

Код, который я выше, был взят из Интернета, и другие люди успешно его использовали, я только сейчас уверенчто не так

Ответы [ 4 ]

3 голосов
/ 30 марта 2011

Нельзя добавить текст к свойству RichTextBo.Rtf, он должен быть в формате RTF .

Попробуйте, например:

richTextBox.Rtf = "Hello world";

будет выдано то же исключение.

Вместо этого можно использовать свойство RichTextBox.Text, которое может принимать простой текст.

1 голос
/ 30 марта 2011

в моей базе данных есть 1 столбец, в котором есть данные (1 слово в строке в этом столбце)

Итак, вам нужно много строк?Чем вы не должны использовать .ExecuteScalar().Сделайте это:

private void Form2_Load(object sender, EventArgs e)
{
    string connectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\\Documents and Settings\\Harvey\\Desktop\\Test.accdb");
    using (OleDbConnection conGet = new OleDbConnection(connectionString))
    using (OleDbCommand cmdGet = new OleDbCommand())
    try
    {
        cmdGet.CommandType = CommandType.Text;
        cmdGet.Connection = conGet;
        cmdGet.CommandText = "SELECT * FROM Paragraph";

        StringBuilder paragraph = new StringBuilder();

        //open connection
        conGet.Open() 
        using (OleDbDataReader rdr = cmdGet.ExecuteReader())
        {
            while (rdr.Read())
            {
               parapraph.Append(rdr.GetString(0)).Append(" ");
            }
            rdr.Close();
        }

        richTextBox.Rtf = paragraph.ToString();
        // OR...
        richTextBox.Text = paragraph.ToString();

    }
    catch (Exception ex)
    {
        //display generic error message back to user
        MessageBox.Show(ex.Message);
    }
}

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

0 голосов
/ 30 марта 2011

Вы уверены, что хотите выбрать все столбцы из таблицы базы данных? Как это:

cmdGet.CommandText = "SELECT * FROM Paragraph";

Я бы сказал, что это неправильно, вам нужно получить только один столбец, в котором сохранен текст, например:

cmdGet.CommandText = "SELECT MyTextColumn FROM Paragraph"; //Maybe even som Where comparison!!

И было бы лучше использовать свойство Text для richTextBox, чтобы заполнить его, и метод ToStirng в Scalar:

this.richTextBox1.Text = cmd.ExecuteScalar.Tostring();
0 голосов
/ 30 марта 2011

Попробуйте вместо этого использовать свойство Text, так как это просто строка.

richTextBox.Text = cmdGet.ExecuteScalar().ToString();
...