日期:2014-05-17  浏览次数:20419 次

请问,在数据库中插入图片
首先 创建 一个表 和一个存储过程
create table test 
{
  ids identity(1,1), 
  image images

create proc UpdateImage 

  @UpdateImage image 

AS 
Insert into Test(images) values(@UpdateImage) 
GO


再来看下代码

 1.1,在窗体中加一个OpenFileDialog控件 
 1.2,在窗体上添加一个打开文件按钮,添加如下单击事件代码: 

  private void button1_Click(object sender, EventArgs e)
  { 
 
  Stream ms;
  byte[] picbyte;
  if (openFileDialog1.ShowDialog() == DialogResult.OK)
  {
  if ((ms = openFileDialog1.OpenFile()) != null)
  {  
  picbyte = new byte[ms.Length];
  ms.Position = 0;
  ms.Read(picbyte, 0, Convert.ToInt32(ms.Length));
  SqlConnection conn = new SqlConnection();
  conn.ConnectionString = "Data Source=localhost;Database=教务管理;User Id=sa;Pwd=zbqy7135";
  SqlCommand cmd = new SqlCommand("UpdateImage", conn);
  cmd.CommandType = CommandType.StoredProcedure; 
  cmd.Parameters.Add("@UpdateImage", SqlDbType.Image);
  cmd.Parameters["@UpdateImage"].Value = picbyte; 
  conn.Open();
  cmd.ExecuteNonQuery();
  conn.Close(); 
  ms.Close();
  }
  }  
  }

我想问的是,在存储过程中,@UpdateImage的数据类型是image类型的,而在应用程序中为参数Parameters赋值时是byte[]类型的变量picbyte
这怎么能行呢?数据类型都不一样....

------解决方案--------------------
判断图片字节长度,然后转成byte[]即可。
------解决方案--------------------
到底是行不行啊?
如果是可以的话 应该是IMAGE类型在数据库中实际是以二进制的存储的。而在程序中也这样就OK了

如果不可以的话 建议存储图片的时候还是采取存取路径。
------解决方案--------------------
建议存储图片的时候还是采取存取路径
------解决方案--------------------
还是用路径存取吧
------解决方案--------------------
探讨
首先 创建 一个表 和一个存储过程
create table test
{
ids identity(1,1),
image images
}
create proc UpdateImage
(
@UpdateImage image
)
AS
Insert into Test(images) values(@UpdateImage) ……

------解决方案--------------------
探讨

建议存储图片的时候还是采取存取路径

------解决方案--------------------
数据库本身存储图片就是先转化为2进制串后再存存储的,所以你用image或varchar在数据库存都可以的。而实际上图片用数据库存插入和读取的时候都面临一个格式转化的问题,所以图片的存取效率很低,稍微大点的图片可能就需要读取很长时间,所以建议图片还是存路径比较好。