无法使用Dapper.NET将文件流插入SQL文件表

Raj*_*jiv 2 c# sql ado.net dapper dapper-extensions

我在项目中使用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();
Run Code Online (Sandbox Code Playgroud)

引发异常:mscorlib.dll中的“ System.NotSupportedException”

附加信息:类型System.IO.Stream的成员fileStream不能用作参数值

有没有人这样做或知道我可以使用的任何dapper扩展插件?

Jai*_*ias 5

您需要使用DynamicParameters类并指定参数的数据类型。对于该示例,我创建了一个表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);
    }
}
Run Code Online (Sandbox Code Playgroud)