我在将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个字)
我上面的代码来自互联网,其他人已成功使用它,我现在才知道出了什么问题
答案 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();