有一个类:
[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
已经会用FileStream把它序列化进文件里和反序列化出来了,但现在想把它先序列化进MemoryStream里,然后再放到SQL数据库中的一个image类型字段里,再把它从数据库里读出来,不知道该怎么写。
[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
已经会用FileStream把它序列化进文件里和反序列化出来了,但现在想把它先序列化进MemoryStream里,然后再放到SQL数据库中的一个image类型字段里,再把它从数据库里读出来,不知道该怎么写。
StreamWriter writer = new StreamWriter(stream,Encoding.ASCII);
writer.Write(str);
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);
writer.Close();
return stream;str存在你数据库中的字符串。再将流反序列化成Image
我的表里就一个id是自增的,一个im是image类型,表名叫testimage,能一步步的说下怎么把这个类放进数据库再取出来吗?
感谢感谢!
//将流转换成字符串
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存,网上很多的
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"];
往下该怎么写呢?多谢啊,大神!能不能帮我一行一行写一下,还是理解不了,多谢多谢哦!费神了!
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"];
往下该怎么写呢?多谢啊,大神!能不能帮我一行一行写一下,还是理解不了,多谢多谢哦!费神了!
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"];
往下该怎么写呢?能不能帮我一行一行写一下,还是有点理解不了,多谢多谢哦,老兄,麻烦您费神了!
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就行了
你不知道引入命名空间?
你不知道引入命名空间?引入了,但还是不知道那是干什么用的。
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);
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);
以上是修改后的代码,报错流不能为空;不知道该怎么把字符串变成流