richtextbox通过LoadFile显示图片提示文件格式无效,急等!

.Net技术 码拜 9年前 (2015-05-10) 1417次浏览 0个评论

代码如下:
        private void button2_Click(object sender, EventArgs e)//richtextbox图片存入数据库
        {
            MemoryStream STM = new MemoryStream();
            this.richTextBox1.SaveFile(STM, RichTextBoxStreamType.RichText);
            byte[] bWrite = STM.ToArray();

            DBManager db = new DBManager();
            string sqlStr = “insert into BLJ_Test(ID,rtfimage) values(“”1″”,””” + bWrite + “””)”;
            db.UpdataDB(sqlStr);
            MessageBox.Show(“插入数据成功”);
            richTextBox1.Text = “”;

        }

        private void button3_Click(object sender, EventArgs e)//数据库图片读取
        {

            string sqlStr = “select rtfimage from BLJ_Test where ID=0”;
            SqlCommand myCmd = new SqlCommand(sqlStr, DBManager.sqlConn);
            DBManager.sqlConn.Open();
            SqlDataReader dt = myCmd.ExecuteReader();
            dt.Read();
            byte[] bReader = (byte[])dt[“rtfimage”];
            MemoryStream mstream = new MemoryStream(bReader, false);
            RichTextBox rtb = new RichTextBox();
            rtb.LoadFile(mstream, RichTextBoxStreamType.RichText);//就是这个位置报错
            MessageBox.Show(“test”);
            richTextBox1.SelectedRtf = rtb.Rtf;
            dt.Close();
            DBManager.sqlConn.Close();
        }
报错信息如下:

有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.ArgumentException: 文件格式无效。
   在 System.Windows.Forms.RichTextBox.StreamIn(Stream data, Int32 flags)
   在 System.Windows.Forms.RichTextBox.LoadFile(Stream data, RichTextBoxStreamType fileType)
   在 BLJ.Test1.button3_Click(Object sender, EventArgs e) 位置 e:\WorkSpace\BLJ\BLJ\BLJ\BLJ\Test1.cs:行号 57
   在 System.Windows.Forms.Control.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
   在 System.Windows.Forms.Button.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

20分
string sqlStr = “insert into BLJ_Test(ID,rtfimage) values(“”1″”,””” + bWrite + “””)”;
晕死,
 bWrite是个字节数组
你这样拼接进字符串里,你确定存进去的是个什么玩意吗

要存image类型的字段,必须参数化传值

引用 1 楼 Z65443344 的回复:

string sqlStr = “insert into BLJ_Test(ID,rtfimage) values(“”1″”,””” + bWrite + “””)”;
晕死,
 bWrite是个字节数组
你这样拼接进字符串里,你确定存进去的是个什么玩意吗

要存image类型的字段,必须参数化传值

谢谢解答,已经解决
但是遇到另外一个问题,数据存入SQL,怎么才能读取显示到datagridview中呢?数据怎么绑定到datagridview指定的列?

                    dataGridView1.DataSource = ds.Tables[0];
                    Column1.DataPropertyName = ds.Tables[0].Columns[“ID”].ToString();
                    Column2.DataPropertyName = ds.Tables[0].Columns[“Text”];
                    Column3.DataPropertyName = ds.Tables[0].Columns[“Good”];
                    Column4.DataPropertyName = ds.Tables[0].Columns[“Loading”].ToString();
                    Column5.DataPropertyName = ds.Tables[0].Columns[“People”].ToString();
                    Column6.DataPropertyName = ds.Tables[0].Columns[“Person1”].ToString();
                    Column7.DataPropertyName = ds.Tables[0].Columns[“Time1”].ToString();
                    Column8.DataPropertyName = ds.Tables[0].Columns[“Person2”].ToString();
                    Column9.DataPropertyName = ds.Tables[0].Columns[“Time2”].ToString();
                    Column10.DataPropertyName = ds.Tables[0].Columns[“Person3”].ToString();
                    Column11.DataPropertyName = ds.Tables[0].Columns[“Time3”].ToString();
                    Column12.DataPropertyName = ds.Tables[0].Columns[“Person4”].ToString();
                    Column13.DataPropertyName = ds.Tables[0].Columns[“Time4”].ToString();
                    Column14.DataPropertyName = ds.Tables[0].Columns[“Pingjia”].ToString();
                    Column15.DataPropertyName = ds.Tables[0].Columns[“Liouyan”].ToString();
这样绑定后,SQL查询出的数据,继续新增到了datagridview后面列!怎么解决,只绑定上面的列
20分
哪些列不想显示,直接设置
dataGridView1.Columns[index].visible=false;
就行了
引用 4 楼 Z65443344 的回复:

哪些列不想显示,直接设置
dataGridView1.Columns[index].visible=false;
就行了

求帮解答,万分感谢!其实不是显示不显示问题,我datagridview已经绑定了数据库,我现在需要用代码设置dataGridView1.Columns[0]这列为DataGridViewImageColumn
例如:    dataGridView1.DataSource = ds.Tables[0];
                    dataGridView1.Columns[0].HeaderText = “单号”;
                    dataGridView1.Columns[0].Width = 150;
                    dataGridView1.Columns[1].HeaderText = “内容”;
                    dataGridView1.Columns[1].Width = 150;
                    dataGridView1.Columns[2].HeaderText = “解决情况”;
                    dataGridView1.Columns[2].Width = 60;

你完全可以select查询的时候直接重命名成中文,就不要费2遍事了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明richtextbox通过LoadFile显示图片提示文件格式无效,急等!
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!