【问题标题】:Storing Image Bytes into database not working将图像字节存储到数据库中不起作用
【发布时间】:2017-09-26 18:47:47
【问题描述】:

大家好,我正在制作一个简单的网络应用程序,它利用用户网络摄像头和/或允许您上传图片。请忽略图片中的错误,这是故意的。

我得到这样的图像字节:

现在我想用 SQL 数据类型 Image 将它输入到我的数据库中。 在我的数据访问层中,我的参数如下所示:

.

  public int AddParam(string ParamName, byte[] pic)
    {
        return AddParam( ParamName, pic);

    }

我输入它们并尝试像这样执行它:

 DataAccessLayer DataAccessLayer = new DataAccessLayer()    
 DataAccessLayer.PictureCaptured(dlStudentID.SelectedValue.ToString(),imgByte.ToArray());
                                DataSet ds = new DataSet();
                                DataAccessLayer .WebExecute(out ds);   

它给了我这样的错误:

我不明白它为什么这样做。

如果您有任何提示或答案,请告诉我。

非常感谢。

【问题讨论】:

  • 不要发布您的代码图片,包括实际代码并突出显示它,然后按{ } 按钮对其进行格式化。另外,您希望函数AddParam 做什么?你认为它在调用什么函数,并显示该函数。
  • 如果这是针对 SQL Serverimage 数据类型将在 SQL Server 的未来版本中删除。避免在新的开发工作中使用此数据类型,并计划修改当前使用它的应用程序。请改用varbinary(max)See details here

标签: c# sql asp.net arrays byte


【解决方案1】:

使用此方法将图像转换为字节,

public byte[] ImageToByte(string imageLocation)
{
    byte[] imageData = null;
    FileInfo fileInfo = new FileInfo(imageLocation);
    long imageFileLength = fileInfo.Length;
    FileStream fs = new FileStream(imageLocation, FileMode.Open, FileAccess.Read);
    BinaryReader br = new BinaryReader(fs);
    imageData = br.ReadBytes((int)imageFileLength);
    return imageData;
}

【讨论】:

  • 我没有图像位置,我没有将其保存在任何地方,我只是将所选文件转换为 Buytes;
【解决方案2】:

如果我不得不猜测,AddParams 方法会一遍又一遍地调用自己,这就是您收到 StackOverFlowException 的原因: https://msdn.microsoft.com/en-us/library/system.stackoverflowexception(v=vs.110).aspx

【讨论】:

  • 所以我用什么代码让它只有在我可以拥有多个婴儿车时才称它为自我
  • 我想你可能想看看这个:msdn.microsoft.com/en-us/library/… 我感觉你正在尝试创建一个 SqlCommand 对象。您需要将对象添加到 SqlCommand 对象的属性参数中
猜你喜欢
  • 2010-12-27
  • 2013-08-21
  • 2012-06-04
  • 1970-01-01
  • 2013-01-09
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多