首先让我告诉你,我是一名DBA,正在努力将技能转化为网络开发的世界,而且我对这一切都很陌生,并且在我学习的过程中学习。
我有一个SQL Server数据库,它有一个存储工作人员图像的表。
我目前正在更新SSRS中的一些销售报告,每份报告都将是销售经理的图片。
我想要做的是创建一个Web服务,它将接受一个人员ID整数作为参数,并返回一个调整大小的图像版本。
因此,报告中的图片网址将类似于http://photoserver.com/getphoto?id=123456
所以某种。用于执行此操作的Net C#代码。
我知道还有其他方法可以实现这一点,但我真的想学习如何开发这些简单的Web服务。
由于
答案 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;
}
}
}
然后你会得到一个像这样的图像检索网址:
然后,您可以将计算列添加到PowerBI模型中的Product表中,如下所示:
ProductImageUrl =&#34; https://yourfunction.azurewebsites.net/api/HttpTriggerCSharp1?code=E0Xw32IKcJadkr6OmhzUVoEaLXpQLDgsA0WerH3EcaOL7yKhDKiyg==&ProductId=&#34; &安培; &#39; SalesLT产品&#39; [ProductID]