【问题标题】:Web service to return image from SQL Server database从 SQL Server 数据库返回图像的 Web 服务
【发布时间】:2018-05-23 14:01:18
【问题描述】:

首先让我告诉你,我是一名 DBA,正在尝试将技能跨入 Web 开发领域,我对这一切都很陌生,并且在我前进的过程中学习。

我有一个 SQL Server 数据库,其中有一个存储员工图像的表。

我目前正在更新 SSRS 中的一些销售报告,每个报告上都会有销售经理的图片。

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

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

所以某种. Net C# 代码来执行此操作。

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    我最近使用 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;
    
            }
        }
    
    
    }
    

    然后你会得到一个这样的图片检索url:

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

    然后您可以像这样在 PowerBI 模型中的 Product 表中添加一个计算列:

    ProductImageUrl = "https://yourfunction.azurewebsites.net/api/HttpTriggerCSharp1?code=E0Xw32IKcJadkr6OmhzUVoEaLXpQLDgsA0WerH3EcaOL7yKhDKiyg==&ProductId=" & 'SalesLT 产品'[ProductID]

    【讨论】:

    • 超级有帮助,我会探索这个并回复你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多