我正在尝试将此字节数组插入SQL Server数据库,列数据类型为varbinary,这是我在C#中的代码SqlParameter param = new SqlParameter(@buffer, SqlDbType.VarBinary, 8000);param.Value = buffer;string _query = IN...
我正在尝试将此字节数组插入SQL Server数据库,列数据类型为varbinary,这是我在C#中的代码
SqlParameter param = new SqlParameter("@buffer", SqlDbType.VarBinary, 8000);
param.Value = buffer;
string _query = "INSERT INTO [dbo].[Files] (FileID, Data, Length) VALUES ('" + uID + "','" + buffer + "','" + buffer.Length + "')";
using (SqlCommand comm = new SqlCommand(_query, conn))
{
comm.Parameters.Add(param);
try
{
conn.Open();
comm.ExecuteNonQuery();
}
catch (SqlException ex)
{
return Request.CreateResponse(HttpStatusCode.OK, "Something went wrong : " + ex.Message);
}
finally
{
conn.Close();
}
}
我也在_quuff字符串中使用了@buffer而不是缓冲区,但我一直收到错误:
Converting from varchar to varbinary is not allowed use the CONVERT command to execute this query
并且我使用了Convert并且它已成功保存,但是当我检索它时,它只检索前14个字节,
byte[] bytearr = (byte[])row["Data"];
我一直在寻找,一无所获.你能帮我存储字节并检索它吗?
解决方法:
您在SQL查询中将值作为文字发送.这是一个坏主意,但首先是您的查询问题:
SQL Server中的varbinary文字不是一个字符串(用引号括起来),而是一个非常大的十六进制数字,看起来像这个例子:SET @binary = 0x1145A5B9C98.
顺便说一句,我发现你把你的ID和你的长度也用引号括起来很奇怪.我假设它们是整数,所以应该指定它们没有引号:SET @i = 2.它可能仍然适用于你的情况,因为SQL Server将动态地将字符串转换为整数.这只是令人困惑而且效率低下.
现在,请不要通过连接这样的文字来做SQL请求.请改用SQL参数.像这样的东西:
cmd.CommandText = "INSERT INTO Files (FileId, Data, Length) VALUES (@id, @data, @length)";
cmd.Parameters.AddWithValue("id", 3);
cmd.Parameters.AddWithValue("data", someByteArray);
cmd.Parameters.AddWithValue("length", someByteArray.Length);
如果你想做得更简单,请看一些帮手.我推荐Dapper.
最后,我注意到你要存储一个varbinary及其长度.这不是必需的,你总是可以获得存储在SQL Server中的varbinary的长度,如下所示:SELECT LEN(Data)FROM Files
本文标题为:从C#将字节数组插入SQL Server以及如何检索它
基础教程推荐
- Unity快速生成常用文件夹的方法 2023-03-10
- Unity游戏之存储数据 2023-04-14
- 浅析C# 委托(Delegate) 2023-03-04
- C#事件中的两个参数详解(object sender,EventArgs e) 2023-07-04
- C#实现图表中鼠标移动并显示数据 2023-05-21
- C# 泛型集合类List<T>使用总结 2023-06-09
- C#中的委托delegate用法的示例详解 2023-03-04
- Unity使用EzySlice实现模型多边形顺序切割 2023-03-04
- C# 使用CancellationTokenSource取消多线程 2023-04-27
- WPF中NameScope的查找规则详解 2022-12-31