有一个类:
[Serializable] 
public class MyObject { 
public int n1 = 0; 
public int n2 = 0; 
public String str = null; 

已经会用FileStream把它序列化进文件里和反序列化出来了,但现在想把它先序列化进MemoryStream里,然后再放到SQL数据库中的一个image类型字段里,再把它从数据库里读出来,不知道该怎么写。

解决方案 »

  1.   

    MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream,Encoding.ASCII);
    writer.Write(str);
    writer.Flush();
    stream.Seek(0, SeekOrigin.Begin);
    writer.Close();
    return stream;str存在你数据库中的字符串。再将流反序列化成Image
      

  2.   

    谢谢哦,不过我还是没弄懂,比较笨一点,不好意思啊!
    我的表里就一个id是自增的,一个im是image类型,表名叫testimage,能一步步的说下怎么把这个类放进数据库再取出来吗?
    感谢感谢!
      

  3.   

    你用了序列化可以把流转换成字符串,在数据库中直接存储字符串,要用的时候再用上面那个转回来
    //将流转换成字符串
    public string GetStringByStream(Stream stream, Encoding encode)
    {
        stream.Seek(0, SeekOrigin.Begin);//设置流的起点
        string content = string.Empty;
        StreamReader read = new StreamReader(stream, encode);
        content = read.ReadToEnd();
        stream.Flush();
        stream.Close();
        read.Close();
        return content;
    }还有中是不用序列化的,直接用byte存,网上很多的
      

  4.   

    Encoding encode是什么啊?报错说上下文中不存在。还有就是我自己写到这里了
     byte[] content;
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = @"server=KONG;uid=sa;database=ParkAdv";
            string str = "select TaskCarInfo from DPpaiCheShenQing where id=56";
            SqlDataAdapter da = new SqlDataAdapter("select TaskCarInfo from DPpaiCheShenQing where id=56", conn);
            DataSet ds = new DataSet();
            da.Fill(ds, "word");
            DataRow dr = ds.Tables["word"].Rows[0];//将读取的第一行内容保存到dr
            content = (byte[])dr["TaskCarInfo"];
    往下该怎么写呢?多谢啊,大神!能不能帮我一行一行写一下,还是理解不了,多谢多谢哦!费神了!
      

  5.   

    Encoding encode是什么啊?报错说上下文中不存在。还有就是我自己写到这里了
     byte[] content;
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = @"server=KONG;uid=sa;database=ParkAdv";
            string str = "select TaskCarInfo from DPpaiCheShenQing where id=56";
            SqlDataAdapter da = new SqlDataAdapter("select TaskCarInfo from DPpaiCheShenQing where id=56", conn);
            DataSet ds = new DataSet();
            da.Fill(ds, "word");
            DataRow dr = ds.Tables["word"].Rows[0];//将读取的第一行内容保存到dr
            content = (byte[])dr["TaskCarInfo"];
    往下该怎么写呢?多谢啊,大神!能不能帮我一行一行写一下,还是理解不了,多谢多谢哦!费神了!
      

  6.   

    Encoding encode这里报错说找不到,还有就是,这是我自己写的:
     byte[] content;
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = @"server=KONG;uid=sa;database=ParkAdv";
            string str = "select TaskCarInfo from DPpaiCheShenQing where id=56";
            SqlDataAdapter da = new SqlDataAdapter("select TaskCarInfo from DPpaiCheShenQing where id=56", conn);
            DataSet ds = new DataSet();
            da.Fill(ds, "word");
            DataRow dr = ds.Tables["word"].Rows[0];//将读取的第一行内容保存到dr
            content = (byte[])dr["TaskCarInfo"];
    往下该怎么写呢?能不能帮我一行一行写一下,还是有点理解不了,多谢多谢哦,老兄,麻烦您费神了!
      

  7.   

    MemoryStream stream = new MemoryStream();
    BinaryFormatter binaryformat = new BinaryFormatter();
    binaryformat.Serialize(stream,MyObject);//将对象序列化到stream中
    然后调用这个:
    public string GetStringByStream(Stream stream, Encoding encode)
    {
      stream.Seek(0, SeekOrigin.Begin);//设置流的起点
      string content = string.Empty;
      StreamReader read = new StreamReader(stream, encode);
      content = read.ReadToEnd();
      stream.Flush();
      stream.Close();
      read.Close();
      return content;
    }
    string conent= GetStringByStream(stream,Encoding.ASCII);将content存入数据库中读取就是:MemoryStream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream,Encoding.ASCII);
    writer.Write(str);//str-你数据库里读出来的字段
    writer.Flush();
    stream.Seek(0, SeekOrigin.Begin);
    writer.Close();
    return stream;然后将stream反序列化成MyObject就行了
      

  8.   

    Encoding encode是什么啊?报错说上下文中不存在。还有就是我自己写到这里了
    你不知道引入命名空间?
      

  9.   

    Encoding encode是什么啊?报错说上下文中不存在。还有就是我自己写到这里了
    你不知道引入命名空间?引入了,但还是不知道那是干什么用的。
      

  10.   

    0.0……你鼠标移到Encoding上面,不是会提示这个是干嘛的吗
      

  11.   

    哦,呵呵,谢谢哦,已经写进去了,还有最后一点问题,读出来的时候我有一点不会写。
    MemoryStream stream = new MemoryStream();
            StreamWriter writer = new StreamWriter(stream, Encoding.ASCII);        SqlConnection conn = new SqlConnection();
            conn.ConnectionString = @"server=KONG;uid=sa;database=ParkAdv";
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "select im from testimage";
            cmd.Connection = conn;
            string str = cmd.ExecuteReader();//就是这里不会写,不知道怎么放进str里        conn.Close();
            conn.Dispose();        writer.Write(str);
            writer.Flush();
            stream.Seek(0, SeekOrigin.Begin);
            writer.Close();
            IFormatter formatter = new BinaryFormatter();
            
            MyObject obj = (MyObject)formatter.Deserialize(stream);
            stream.Close();
            Response.Write(obj.n1);
            Response.Write(obj.n2);
            Response.Write(obj.str);
      

  12.   

     string str = "";
                byte[] imagebytes = null;
                MemoryStream stream = new MemoryStream(imagebytes);
                StreamWriter writer = new StreamWriter(stream, Encoding.ASCII);            SqlConnection conn = new SqlConnection();
                conn.ConnectionString = @"server=KONG;uid=sa;database=ParkAdv";
                conn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "select im from testimage";
                cmd.Connection = conn;
                SqlDataReader sdr = cmd.ExecuteReader();
                Response.Write(sdr.HasRows);
                while(sdr.Read())
                {
                    str=sdr["im"].ToString();
                }
                conn.Close();
                conn.Dispose();            writer.Write(str);
                writer.Flush();
                stream.Seek(0, SeekOrigin.Begin);
                writer.Close();
                IFormatter formatter = new BinaryFormatter();            MyObject obj = (MyObject)formatter.Deserialize(stream);
                stream.Close();
                Response.Write(obj.n1);
                Response.Write(obj.n2);
                Response.Write(obj.str);
    以上是修改后的代码,报错流不能为空;不知道该怎么把字符串变成流