数据库到富文本框问题

时间:2011-03-30 18:10:04

标签: c# ms-access oledb rtf

我在将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 个答案:

答案 0 :(得分:3)

您无法向RichTextBo.Rtf媒体资源添加任何文字,但必须位于RTF Format

试试这个例子:

richTextBox.Rtf = "Hello world";

它将抛出相同的异常。

您可以使用RichTextBox.Text属性,它可以接受纯文本。

答案 1 :(得分:1)

  

在我的数据库中,有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);
    }
}

请注意,我还移动了其他一些东西 - 不用担心,即使您看不到它,我也会正确关闭您的连接。

答案 2 :(得分:0)

尝试使用Text属性,因为它只是一个字符串。

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

答案 3 :(得分:0)

您确定要从dataBase表中选择所有列吗? 像这样:

cmdGet.CommandText = "SELECT * FROM Paragraph";

我想说这是不对的,你只需要保存文本的一列,如:

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

最好使用richTextBox的Text属性填充它和Scalar上的ToStirng方法:

this.richTextBox1.Text = cmd.ExecuteScalar.Tostring();