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í

C# .NET .NET (C# a Visual Basic) 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í American English version English version

Avatar
Franc Beran
Člen
Avatar
Franc Beran:

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.