vs2005,winform下,通过存储过程把图片存入数据库的image字段中,然后通过
byte[] pic=(byte[])ds.tables[0].rows[0]["pic"]读出来后,发现pic.length变成了16
插入代码
byte[] mypic = new byte[int.Parse(spic.Length.ToString())];
spic.Read(mypic,0,int.Parse(spic.Length.ToString()));
string sql = "insert into mypic(picname,pic)values('"+DateTime.Now.ToLongTimeString()+"','@fs')";
ExecuteSqlImg(sql,mypic);
读取代码
if(dt.Rows.Count>0)
{
byte[] bytepic = (byte[])dt.Rows[0]["pic"];
myStream = new MemoryStream(bytepic,true);
myStream.Read(bytepic,0,int.Parse(myStream.Length.ToString()));
myStream.Position = 0;
}
怎么回事呢?
byte[] pic=(byte[])ds.tables[0].rows[0]["pic"]读出来后,发现pic.length变成了16
插入代码
byte[] mypic = new byte[int.Parse(spic.Length.ToString())];
spic.Read(mypic,0,int.Parse(spic.Length.ToString()));
string sql = "insert into mypic(picname,pic)values('"+DateTime.Now.ToLongTimeString()+"','@fs')";
ExecuteSqlImg(sql,mypic);
读取代码
if(dt.Rows.Count>0)
{
byte[] bytepic = (byte[])dt.Rows[0]["pic"];
myStream = new MemoryStream(bytepic,true);
myStream.Read(bytepic,0,int.Parse(myStream.Length.ToString()));
myStream.Position = 0;
}
怎么回事呢?
@name as varchar(50),
@image as image
as
insert into photos([name],photo)
values (@name,@image)
return @@identity
GO if (this.openFileDialog1.ShowDialog() != DialogResult.OK)
return;
string filename = this.openFileDialog1.FileName;
ImageFormat iformat = null;
switch(filename.Substring(filename.IndexOf('.')+1).ToLower())
{
case "bmp":
iformat=ImageFormat.Bmp;
break;
case "gif":
iformat=ImageFormat.Gif;
break;
case "jpg":
iformat=ImageFormat.Jpeg;
break;
}
MemoryStream ms = new MemoryStream();
Image imgae=Image.FromFile(filename);
imgae.Save(ms, iformat);
try
{
conn.Open();
SqlCommand cmd = new SqlCommand("sp_InsertPhoto2", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@name", SqlDbType.VarChar));
cmd.Parameters.Add(new SqlParameter("@image", SqlDbType.Image));
cmd.Parameters[0].Value = Path.GetFileNameWithoutExtension(filename);
cmd.Parameters[1].Value = ms.ToArray();
cmd.ExecuteNonQuery(); }
finally
{
conn.Close();
}
这是我的,你的应该是插入有错吧,我想,不确定啦
CREATE PROCEDURE PIC_ADD
@PicID int output,
@PicName varchar(200) ,
@Pic image
AS
INSERT INTO DO_POPIC(
[PicName],[Pic]
)VALUES(
@PicName,@Pic
)
SET @PicID = @@IDENTITY
结果还是一样的,在插入数据库前byte[]的长度是正常的,插入后再读出就变成16了,有人知道怎么回事么?