Web服务从SQL Server数据库返回图像

时间:2017-12-09 14:01:51

标签: c# asp.net sql-server web-services

首先让我告诉你,我是一名DBA,正在努力将技能转化为网络开发的世界,而且我对这一切都很陌生,并且在我学习的过程中学习。

我有一个SQL Server数据库,它有一个存储工作人员图像的表。

我目前正在更新SSRS中的一些销售报告,每份报告都将是销售经理的图片。

我想要做的是创建一个Web服务,它将接受一个人员ID整数作为参数,并返回一个调整大小的图像版本。

因此,报告中的图片网址将类似于http://photoserver.com/getphoto?id=123456

所以某种。用于执行此操作的Net C#代码。

我知道还有其他方法可以实现这一点,但我真的想学习如何开发这些简单的Web服务。

由于

1 个答案:

答案 0 :(得分:0)

我最近使用Azure功能为PowerBI做了这个。使用IIS on-prem和SSRS的代码大致相同:

#r "System.Configuration"
#r "System.Data"

using System.Net;
using System.Net.Http.Headers;
using System.Data.SqlClient;
using System.IO;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string productStr = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "ProductId", true) == 0)
        .Value;

    int productId = int.Parse(productStr);

    string constr = "server=someserver.database.windows.net;database=databasename;user id=imageViererUser;Password=password";

    using (var con = new SqlConnection(constr))
    {

        await con.OpenAsync();
        log.Info("Connection Open.");

        var sql = @"        
        select ThumbnailPhoto
        from SalesLT.Product
        where ProductId = @productId
        ";

        var cmd = new SqlCommand(sql, con);

        cmd.Parameters.Add(new SqlParameter("@productId", productId));

        var buf = new MemoryStream();

        using (var rdr = await cmd.ExecuteReaderAsync(System.Data.CommandBehavior.SequentialAccess))
        {
            if (!rdr.Read())
            {
                return req.CreateResponse(HttpStatusCode.NotFound);
            }
            var stream = rdr.GetStream(0);

            var resp = req.CreateResponse(HttpStatusCode.OK);

            await stream.CopyToAsync(buf);
            buf.Position = 0;

            log.Info($"Image Read {buf.Length} bytes");

            resp.Content = new StreamContent(buf);

            resp.Content.Headers.ContentType = new MediaTypeHeaderValue("image/gif");

            return resp;

        }
    }


}

然后你会得到一个像这样的图像检索网址:

https://yourfunction.azurewebsites.net/api/HttpTriggerCSharp1?code=E0Xw32IKcJadkr6OmhzUVoEaLXpQLDgsA0WerH3EcaOL7yKhDKiyg==&ProductId=952

然后,您可以将计算列添加到PowerBI模型中的Product表中,如下所示:

ProductImageUrl =&#34; https://yourfunction.azurewebsites.net/api/HttpTriggerCSharp1?code=E0Xw32IKcJadkr6OmhzUVoEaLXpQLDgsA0WerH3EcaOL7yKhDKiyg==&ProductId=&#34; &安培; &#39; SalesLT产品&#39; [ProductID]