一个ASP.NET项目一个表的字段为image类型,但保存的不是图片,是字符,
用存储过程保存时,该字段用字符串赋值保存正确,
但读取出来,想显示在TextBox中却不正确,不知道该怎么写!
高手指点!!
读取:
(SqlDataReader dr)txtCheckUp25.Text=dr.GetValue(25).ToString();//image显示不对
txtCheckUp26.Text=dr.GetValue(26).ToString();//image显示不对
保存的时候:mytable.Add("@CheckUp24",txtCheckUp24.Text);//image保存对的
mytable.Add("@CheckUp25",txtCheckUp25.Text);//image保存对的
mytable.Add("@CheckUp26",txtCheckUp26.Text);//image保存对的

解决方案 »

  1.   

    1)上传并存入SQL Server 
    数据库结构 
    create table test 

    id identity(1,1), 
    FImage image 

    相关的存储过程 
    Create proc UpdateImage 

    @UpdateImage Image 

    As 
    Insert Into test(FImage) values(@UpdateImage) 
    GO 
    在UpPhoto.aspx文件中添加如下: 
    <input id="UpPhoto" name="UpPhoto" runat="server" type="file"> 
    <asp:Button id="btnAdd" name="btnAdd" runat="server" Text="上传"></asp:Button> 
    然后在后置代码文件UpPhoto.aspx.cs添加btnAdd按钮的单击事件处理代码: 
    private void btnAdd_Click(object sender, System.EventArgs e) 

    //获得图象并把图象转换为byte[] 
    HttpPostedFile upPhoto=UpPhoto.PostedFile; 
    int upPhotoLength=upPhoto.ContentLength; 
    byte[] PhotoArray=new Byte[upPhotoLength]; 
    Stream PhotoStream=upPhoto.InputStream; 
    PhotoStream.Read(PhotoArray,0,upPhotoLength); 
    //连接数据库 
    SqlConnection conn=new SqlConnection(); 
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa"; 
    SqlCommand cmd=new SqlCommand("UpdateImage",conn); 
    cmd.CommandType=CommandType.StoredProcedure; 
    cmd.Parameters.Add("@UpdateImage",SqlDbType.Image); 
    cmd.Parameters["@UpdateImage"].Value=PhotoArray; 
    //如果你希望不使用存储过程来添加图片把上面四句代码改为: 
    //string strSql="Insert into test(FImage) values(@FImage)"; 
    //SqlCommand cmd=new SqlCommand(strSql,conn); 
    //cmd.Parameters.Add("@FImage",SqlDbType.Image); 
    //cmd.Parameters["@FImage"].Value=PhotoArray; 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 

    2)从SQL Server中读取并显示出来 
    在需要显示图片的地方添加如下代码: 
    <asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image> 
    ShowPhoto.aspx主体代码: 
    private void Page_Load(object sender, System.EventArgs e) 

    if(!Page.IsPostBack) 

    SqlConnection conn=new SqlConnection() 
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa"; 
    string strSql="select * from test where id=2";//这里假设获取id为2的图片 
    SqlCommand cmd=new SqlCommand(strSql,conn); 
    conn.Open();
    SqlDataReader reader=cmd.ExecuteReader();
    reader.Read(); 
    Response.ContentType="application/octet-stream"; 
    Response.BinaryWrite((Byte[])reader["FImage"]); 
    Response.End(); 
    reader.Close(); 


      

  2.   

    先转成byte[],在转成char[],应该就行了ps:为什么不用text?
      

  3.   

    你的代码是显示图片的代码,
    如果image字段保存的是字符,显示的时候byte[] bs = (byte[])dr["字段"]; string sValue  =  System.Text.Encoding.Default.GetString(bs);
      

  4.   

    cpp2017(幕白兄) :不错的办法!
    OK! 非常感谢!