如何使用文本而不是RTF在数据库字段中存储彩色文本?

时间:2014-03-28 00:16:28

标签: c# sql-server winforms colors rtf

我在Windows窗体应用程序中使用了richtextbox控件,并且在数据库表中有一个与其连接的VarChar字段。我只需要为这个richtextbox中的一些单词着色。当我将richtextbox控件的Text属性保存到数据库时,它只保存没有颜色的文本,因此我必须保存richtextbox控件的Rtf属性。不幸的是,这会导致问题,因为当我从SQL Server Management Studio或其他任何方式查询我的表时,它会向我显示RTF特殊字符,如下例所示:

{\rtf1\fbidis\ansi\ansicpg1256\deff0\deflang3073{\fonttbl{\f0\fnil\fcharset178 Microsoft Sans Serif;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}

当然,这会阻止我因RTF字符而正确搜索或排序数据。

问题:

1-最好将重要数据以RTF格式保存在数据库中,如果安全可靠,如何在不将数据导入richtextbox的情况下操作数据库中的文本?

2-我需要的RTF唯一选项是带背景色的彩色文字。我只需要用4种颜色(红色,绿色,黄色和蓝色)为我的文本着色,并使某些文本的背景颜色变黑。有没有办法使用richtextbox控件的Text属性并用它保存颜色属性?例如,在每个需要着色的单词之前编写颜色代码,例如" / R /表示红色文本/ R /"和" / G /用于绿色文本/ G /"?

我是否考虑过这个问题,还是我坚持使用RTF?

2 个答案:

答案 0 :(得分:4)

颜色之类的东西是演示角色,所以它不应该在ddbb中用于常规文本。在这种情况下,它更像是一个带格式的文档,而RTF似乎是合适的。

如果您需要对此文本进行查询,则可以将文本作为纯文本存储在另一列中,而不进行格式化。

答案 1 :(得分:0)

依靠您的设计,Oscar的解决方案很好,您可以保留原始颜色格式并查询纯文本。但看起来它会增加存储空间。您需要使用两列来存储格式不同的相同数据。

你自己的解决方案,在文本中添加颜色代码是好的,但是你需要在显示之前做更多的处理(从颜色代码格式改为RTF)和保存之前(从RTF改为颜色代码)格式)。

您还需要考虑将来需要更多格式化的内容?示例:更多颜色,甚至需要存储粗体,斜体等样式。如果发生这种情况,如果使用Oscar的方法,则无需更改代码,但如果使用颜色代码方法,则需要更改代码。