簡化的寫法

找到的資料都是先將richtextbox先暫存為temp.rtf檔案,然後再用FileStream的方式載入成資料流。

如果可以直接將richtextbox的文字直將轉成資料流,就不用存成暫存檔了吧。

轉成二進位的方式,也可以保留其中的文字格式、圖片檔等等。

 

        private void SaveRichTextBox(string text)

        {

            using (SqlConnection cn = new SqlConnection("連線字串"))

            {

                SqlCommand cmd = cn.createcommand();

                cmd.commandtext="Insert into 表格(欄位名) values(@欄位名)";//欄位格式為image

                cmd.Parameters.Add("@欄位名", SqlDbType.Image).Value = Encoding.UTF8.GetBytes(text);

                cn.Open();

                try

                {

                    cmd.ExecuteNonQuery();

                }

                catch (Exception ex)

                {

                    throw ex;

                }

                finally

                {

                    cmd.Cancel();

                    cn.Close();

                }

            }

        }

 

        private string GetRichTextBox(int id)

        {

            string res = "";

            using (SqlConnection cn = new SqlConnection("連線字串"))

            {

                SqlCommand cmd = cn.CreateCommand();

                cmd.CommandText = string.Format("Select 欄位名稱 from 表格 where id={0};", id);

                cn.Open();

                try

                {

                    using (SqlDataReader dr = cmd.ExecuteReader())

                    {

                        if (dr.Read())

                        {

                            res = Encoding.UTF8.GetString((byte[])dr.GetValue(0));

                        }

                        dr.Close();

                    }

                }

                catch (Exception ex)

                {

                    throw ex;

                }

                finally

                {

                    cn.Close();

                }

            }

            return res;

        }


網路上的方法

        private void save()

        {

            FileStream stream = null;

            SqlConnection conn = null;

            SqlCommand cmd = null;

            try

            {

                richTextBox1.SaveFile("temp.rtf");

                stream = new FileStream("temp.rtf", FileMode.Open, FileAccess.Read);

                int size = Convert.ToInt32(stream.Length);

                Byte[] rtf = new Byte[size];

                stream.Read(rtf, 0, size);

                conn = new SqlConnection("Database=Northwind;Integrated Security=true;");

                conn.Open();

                cmd = new SqlCommand("UPDATE Employees SET Photo=@Photo WHERE EmployeeID=1", conn);

                SqlParameter paramRTF = new SqlParameter("@Photo", SqlDbType.Image, rtf.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, rtf);

                cmd.Parameters.Add(paramRTF); int rowsUpdated = Convert.ToInt32(cmd.ExecuteNonQuery());

                MessageBox.Show(String.Format("{0} rows updated", rowsUpdated));

            }

            catch (Exception ex) { MessageBox.Show(ex.Message); }

            finally

            {

                if (stream != null) stream.Close();

                if (cmd != null) cmd.Parameters.Clear();

                if (conn != null) conn.Close();

            }

        }

 

        private void Get()

        {

            richTextBox1.Clear();

 

            SqlConnection cn = null; SqlCommand cmd = null;

            SqlDataReader reader = null;

            try

            {

                cn = new SqlConnection("Database=Northwind;Integrated Security=true;");

                cn.Open(); cmd = new SqlCommand("SELECT Photo FROM Employees WHERE EmployeeID=1", cn);

                reader = cmd.ExecuteReader(); reader.Read();

                if (reader.HasRows)

                {

                    if (!reader.IsDBNull(0))

                    {

                        Byte[] rtf = new Byte[Convert.ToInt32((reader.GetBytes(0, 0, null, 0, Int32.MaxValue)))];

                        long bytesReceived = reader.GetBytes(0, 0, rtf, 0, rtf.Length);

                        ASCIIEncoding encoding = new ASCIIEncoding();

                        richTextBox1.Rtf = encoding.GetString(rtf, 0, Convert.ToInt32(bytesReceived));

                    }

                }

            }

            catch (Exception ex) { MessageBox.Show(ex.Message); }

            finally

            {

                if (reader != null) reader.Close();

                if (cn != null) cn.Close();

            }

 

        }

arrow
arrow
    全站熱搜

    ikaritw 發表在 痞客邦 留言(3) 人氣()