无法使用 Dapper.NET 将文件流插入 SQL 文件表
Unable to insert file stream into SQL filetable using Dapper.NET
我在我的项目中使用 Dapper.NET 作为 ORM 层。我正在尝试编写用于文件上传和下载的 WebApis。但是我无法让它工作。我已经进行了足够多的搜索以寻求帮助,但我找不到任何帮助。
如果我只是简单地使用 ADO.NET,我可以为文件流使用 VarBinary 类型的 SqlParameter。但是 Dapper.NET 查询参数只是动态对象。所以下面的代码无法将记录插入到文件表中。
var fileStream = await Request.Content.ReadAsStreamAsync();
var streamId = Guid.NewGuid();
var fileName = streamId.ToString();
var sql = @"Insert into Attachments(stream_id, file_stream, name)
Values(@streamId, @fileStream, @fileName)";
using (var db = new SqlConnection(AppConfig.ConnectionString))
{
await db.ExecuteAsync(sql, new { streamId, fileStream, fileName);
}
fileStream.Close();
Exception thrown: 'System.NotSupportedException' in mscorlib.dll
Additional information: The member fileStream of type System.IO.Stream
cannot be used as a parameter value
有没有人这样做过或知道我可以使用的任何小巧的扩展插件?
您需要使用 DynamicParameters class 并指定参数的数据类型。
例如,我创建了一个 table TEST,其中包含一个名为 Stream VARBINARY(MAX)
的列
using (var connection = new SqlConnection(Properties.Settings.Default.connectionString))
{
connection.Open();
using (var fs = File.Open(Properties.Settings.Default.filePath, FileMode.Open))
{
var sql = "INSERT INTO TEST (Stream) VALUES (@fs)";
var dParams = new DynamicParameters();
dParams.Add("@fs", fs, DbType.Binary);
connection.Execute(sql, dParams);
}
}
我在我的项目中使用 Dapper.NET 作为 ORM 层。我正在尝试编写用于文件上传和下载的 WebApis。但是我无法让它工作。我已经进行了足够多的搜索以寻求帮助,但我找不到任何帮助。
如果我只是简单地使用 ADO.NET,我可以为文件流使用 VarBinary 类型的 SqlParameter。但是 Dapper.NET 查询参数只是动态对象。所以下面的代码无法将记录插入到文件表中。
var fileStream = await Request.Content.ReadAsStreamAsync();
var streamId = Guid.NewGuid();
var fileName = streamId.ToString();
var sql = @"Insert into Attachments(stream_id, file_stream, name)
Values(@streamId, @fileStream, @fileName)";
using (var db = new SqlConnection(AppConfig.ConnectionString))
{
await db.ExecuteAsync(sql, new { streamId, fileStream, fileName);
}
fileStream.Close();
Exception thrown: 'System.NotSupportedException' in mscorlib.dll
Additional information: The member fileStream of type System.IO.Stream cannot be used as a parameter value
有没有人这样做过或知道我可以使用的任何小巧的扩展插件?
您需要使用 DynamicParameters class 并指定参数的数据类型。 例如,我创建了一个 table TEST,其中包含一个名为 Stream VARBINARY(MAX)
的列using (var connection = new SqlConnection(Properties.Settings.Default.connectionString))
{
connection.Open();
using (var fs = File.Open(Properties.Settings.Default.filePath, FileMode.Open))
{
var sql = "INSERT INTO TEST (Stream) VALUES (@fs)";
var dParams = new DynamicParameters();
dParams.Add("@fs", fs, DbType.Binary);
connection.Execute(sql, dParams);
}
}