NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Kódování formátovaných dat z RichTextBoxu při ukládání do SQL DB a při jejich vytáhnutí z DB a opětném zobrazení

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Franc Beran
Člen
Avatar
Franc Beran:12.11.2015 21:07

Zdravím vespolek a obracím se na vás s problémem kódování. Udělal jsem si pokusnou SQL DB kde mám ID int a rtftext - typ text. Do ní ukládám formátovaný text z richtextboxu a problém je v "encoding", ASCII i UTF8 mi po opětovném vložení do richtextboxu umístí nějaké prefixy před diakritiku, anglický text jde na ASCII český ne. Jsou tam různý volby když za "encoding" dám tečku ale je to střílení naslepo. Přikládám dvě rutiny "save" a "load" a prosím o radu. Díky.

private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            //string richText = new TextRange(rtbEditor.Document.ContentStart, rtbEditor.Document.ContentEnd).Text;
            SqlCommand cmd = null;
            string rtf_Text; //string to save to db
            TextRange tr = new TextRange(rtbEditor.Document.ContentStart, rtbEditor.Document.ContentEnd);
            using (MemoryStream ms = new MemoryStream())
            {
                tr.Save(ms, DataFormats.Rtf);
                        // zde je to kódování
                rtf_Text = Encoding.ASCII.GetString(ms.ToArray());
            }

            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))

                {
                    cmd = new SqlCommand("INSERT INTO RTBPokus (rtftext) values('" +  System.Web.HttpUtility.HtmlEncode(rtf_Text) + "')", conn);
                    cmd.Connection.Open();
                    cmd.ExecuteNonQuery();
                }

                MessageBox.Show("Added");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (null != conn) conn.Close();
            }
        }

        private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            string dotaz = "SELECT rtftext FROM RTBPokus WHERE ID=7";

            //SqlConnection conn = null;
            SqlCommand cmd = null;
            SqlDataReader reader = null;
            try
            {
                using (SqlConnection conn = new SqlConnection(connectionString))

                {
                    rtbEditor.Document.Blocks.Clear();
                    cmd = new SqlCommand(dotaz, conn);
                    cmd.Connection.Open();
                    //reader = cmd.ExecuteReader();

                    //SqlDataReader reader;
                    reader = cmd.ExecuteReader();
                    string k = "";
                    while (reader.Read())
                    {
                        k += reader["rtftext"].ToString();
                    }
                    string rtfText = k;//... //string from db
                        // zde je to kódování
                    byte[] byteArray = Encoding.ASCII.GetBytes(rtfText);
                    using (MemoryStream ms = new MemoryStream(byteArray))
                    {
                        TextRange tr = new TextRange(rtbEditor.Document.ContentStart, rtbEditor.Document.ContentEnd);
                        tr.Load(ms, DataFormats.Rtf);
                    }

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (null != reader) reader.Close();
                if (null != conn) conn.Close();
            }
        }
 
Odpovědět
12.11.2015 21:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.