【发布时间】:2015-01-14 11:34:57
【问题描述】:
我有一个基于套接字通信的应用程序,服务器向客户端发送签名图像请求。签名在客户端获取并发送回服务器。
为此,我使用了一个图片框,将其数据转换为字节,然后转换为字符串以通过套接字连接发送到服务器。这一切正常。
我在保存数据库中收到的数据时遇到问题,因为我需要能够将其保存为图像类型,但此时数据仍然是字符串,所以我收到错误:
“操作数类型冲突:nvarchar 与图像不兼容”
我想这是因为我试图将字符串发送到 sql 图像类型?
试图调用过程和错误的代码(服务器端接收的数据为字符串):
try
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["GetConnector"].ConnectionString))
{
SqlCommand sqlComm = new SqlCommand("PL_Device_ReadData", conn);
sqlComm.Parameters.AddWithValue("@DeviceTypeID", DeviceID);
sqlComm.Parameters.AddWithValue("@RequestID", RequestID);
if (DeviceID != "5")
{
sqlComm.Parameters.AddWithValue("@Reading", Reading);
}
else if (DeviceID == "5")
{
sqlComm.Parameters.AddWithValue("@ImageReading", Reading);
sqlComm.Parameters.Add("@ImageReading", SqlDbType.Image);
sqlComm.Parameters["@ImageReading"].Value = Reading;
}
sqlComm.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlComm;
da.Fill(ds);
}
}
catch (Exception e)
{
}
存储过程:
ALTER PROCEDURE [dbo].[PL_Device_ReadData]
@DeviceTypeID INT,
@RequestID INT,
@Reading NVARCHAR(100) = NULL,
@ImageReading IMAGE = NULL
AS
BEGIN
--Data
IF @DeviceTypeID = 5
BEGIN
UPDATE dbo.DeviceRequests
SET ImageData = @ImageReading
WHERE id = @RequestID
AND DeviceTypeID = @DeviceTypeID
END
ELSE
BEGIN
UPDATE dbo.DeviceRequests
SET Value = @Reading
WHERE id = @RequestID
AND DeviceTypeID = @DeviceTypeID
END
END
将图像转换为字节:
byte[] imgData = null;
// storage for the img bytes
imgData = ImgToByteArray(picSignature.InitialImage, ImageFormat.Jpeg);
public static byte[] ImgToByteArray(Image img, ImageFormat imgFormat)
{
byte[] tmpData = null;
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, imgFormat);
tmpData = ms.ToArray();
}
// dispose of memstream
return tmpData;
}
将字节转换为字符串(通过套接字发送):
_Reading = System.Text.Encoding.UTF8.GetString(_imagevalues);
【问题讨论】:
-
所以将其转换回服务器上的图像,然后将其存储在数据库中
-
首先,请在发帖时花些时间来格式化您的代码。第一个 sn-p 的大部分内容都向右缩进 方式。我现在已经修好了,但以后请多加注意。
-
@CoderofCode 这是我遇到的问题的一部分,我不确定如何将字符串转换回图像。
标签: c# .net image winforms sockets