У меня здесь немного странная проблема. Я пытаюсь создать форму, которая при создании выделения из ListBox будет опросить данные из базы данных и отобразить их в RichTextBox. Мне нужны данные для RTF для форматирования.RichTextBox.RTF не принимает строку, созданную из базы данных - C#
Он отлично работает, если я что-то вроде этого:
private void SaveListTest_SelectedIndexChanged(object sender, EventArgs e)
{
DescriptionName = Convert.ToString(SaveListTest.SelectedItem);
//CallDescriptionTest();
CallDescriptionTest2();
SaveRichTest.Rtf = DescriptionText;
}
public void CallDescriptionTest2()
{
switch (DescriptionName)
{
case "Test":
DescriptionText = @"{\rtf1\ansi\ Test}";
break;
case "Words":
DescriptionText = @"{\rtf1\ansi\ A really long phrase}";
break;
}
}
В таком случае RichTextBox (SaveRichTest) будет принимать данные и отображать это просто отлично.
Однако, если я что-то вроде этого, где описание столбца в базе данных есть текст, введенный в точности, как указано выше (экс - @ "{\ rtf1 \ ANSI \ Test}"):
private void SaveListTest_SelectedIndexChanged(object sender, EventArgs e)
{
DescriptionName = Convert.ToString(SaveListTest.SelectedItem);
CallDescriptionTest();
//CallDescriptionTest2();
SaveRichTest.Rtf = DescriptionText;
}
public void CallDescriptionTest()
{
using (SqlConnection con = new SqlConnection(BuildDB))
{
con.Open();
string sql = String.Format("Select * from Abilities where Name = '{0}'", DescriptionName);
SqlCommand oCmd = new SqlCommand(sql, con);
using (SqlDataReader oReader = oCmd.ExecuteReader())
{
while (oReader.Read())
{
DescriptionText = Convert.ToString(oReader["Description"]);
}
con.Close();
}
}
}
Это приведет к сбою программы с ошибкой, что «Формат файла недействителен».
Я знаю, что текст извлекается из базы данных правильно, потому что если я изменил «SaveRichTest.Rtf» на «SaveRichTest.Text», он отобразит его правильно (хотя и с кодом отображения RTF).
Я просто не могу понять, почему он не будет правильно брать строку во втором случае. Для меня это не имеет никакого смысла. Может кто-нибудь помочь?
Просто nit: вызов con.Close() не требуется, поскольку он закрывается, когда соединение установлено. –
Да, каждый раз, когда я видел учебник, они всегда делали con.Close() после того, как они закончили чтение из базы данных, поэтому я предположил, что это необходимо. –
Называть Close() не очень больно, но завершение соединения в используемом блоке вызывает Dispose() автоматически, который сам закроет соединение. –