我在这里看到了一些关于如何将一个图像插入到sql数据库中的帖子,但是我找不到关于如何插入图像和其他一些数据的任何信息。例如,如果要将insert into sql语句发送到服务器,其中包含来自某些文本框的值和来自imagebox的图像。这是我的代码:

string sql;
        System.IO.MemoryStream picStream = new System.IO.MemoryStream();

        emp_picture.Image.Save(picStream, System.Drawing.Imaging.ImageFormat.Jpeg);

        byte[] bytePic = picStream.ToArray();


        sql = "INSERT INTO employees (employee_number, first_name, last_name, address, city, " +
      "zip_code, contact_info, truck_number, trailer_number, picture) " +
      "VALUES ('" + Driver_Number.Text + "', '" + First_Name.Text + "', '" + Last_Name.Text +
          "', '" + Address.Text + "', '" + City.Text + "', '" + Zip_Code.Text + "', '" + Contact_info.Text + "', '" +
          Truck_Number.Text + "', '" + Trailer_Number.Text +"', '"+bytePic+"')";

当我试图检索图像时,它会说:“参数无效。”我知道使用了一个没有任何参数的纯字符串,这就是它抛出该异常的原因。我只是不知道是否可以使用参数向服务器发送消息。我很想知道如何解决这个问题。谢谢。

最佳答案

假设您的图像非常小,有几种方法可以做到这一点
创建一个包,比如说一个包含图像数据和“其他”数据的类。
序列化并通过网络发送,在另一端接收并反序列化。
请注意,通过网络发送数据是有限制的。这深入到tcp的数据包级别。因此,通常在C代码示例中,您会发现有效负载的大小等于1024。这是单个发送/接收请求的最大限制。
如果你有一个大图像,需要通过网络发送,你必须把它分解成碎片发送。例如。
发送
断开图像,生成递增/递增序列号。把这个号码放在某处
通过网络发送带有自定义字符串标记(如“图像开始”)的第一个图像部件
通过网络发送带有自定义字符串标记(如“图像结束”)的最后一个图像部分
使用初始号码并将其附加到“其他”数据上,然后通过网络发送,可能还会附加另一个字符串“其他数据”以指示“其他数据”
接收
现在,当您接收到部分图像时,将这些部分保存在类似image<int,byte[]>的字典中。你知道当你通过检查字符串“图像开始”得到第一个图像部分时
以升序序列号保存每个部分(这允许您正确重建图像)
通过检查“图像结束”字符串,可以知道何时接收到最后一个图像部分。
你知道当你收到“其他”数据
按升序对列表中的图像数据进行排序,提取字节,就得到了图像。
希望这能给你一个想法或开始。:)

关于c# - 将图像与C#中的其他一些数据插入SQL Server,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27896175/

10-17 00:15
查看更多