Хранение изображения в SQL Server - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно создать процедуру на сервере SQL, которая берет веб-URL изображения и преобразует его в VARBINARY, а после этого: сохраняет в столбце с именем "personqr_Image" в таблице "tblPersons".

Я создал процедуру «getPersonQrCode», которая возвращает URL-адрес уникального QR-кода (изображение 450x450), и с помощью этого URL-адреса мне нужно преобразовать его в тип данных VARBINARY, чтобы сохранить его в моей базе данных SQL.

К сожалению, я действительно не нашел решения онлайн, возможно, потому что я не очень знаком с предметом.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Вы не можете сделать это исключительно в TSQL, так как он не имеет никаких функций для просмотра веб-страниц и обработки http-запросов и ответов.Если вам нужно сделать это в SQL Server, вам нужно написать процедуру CLR.

0 голосов
/ 13 июня 2019

Вот функция CLR, которая позволит вам отправлять HTTP-запросы

 public class RestClient
{
    [SqlFunction(DataAccess = DataAccessKind.Read)]
    public static string Submit(string url, string data, string contentType, string 
    method = "POST",
        string httpHeaderCredentials = "")
    {
        try
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | 
            SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

            var request = (HttpWebRequest) WebRequest.Create(url);

            //Add header credentials if required
            if (!string.IsNullOrEmpty(httpHeaderCredentials))
            {
                request.Headers.Add("Authorization: " + httpHeaderCredentials);
            }

            request.ContentType = contentType;
            request.Method = method;

            if (request.Method == "PATCH")
            {
                //http://stackoverflow.com/questions/31043195/rest-api-patch-request
                request.ServicePoint.Expect100Continue = false;
            }


            if (method == "POST" || method == "PATCH")
            {
                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                    streamWriter.Write(data);
                    streamWriter.Flush();
                    streamWriter.Close();
                }
            }
            var httpResponse = request.GetResponse();


            using (var responseStream = httpResponse.GetResponseStream())
            {
                if (responseStream != null)
                {
                    using (var reader = new StreamReader(responseStream))
                    {
                        return reader.ReadToEnd().Replace("\n", string.Empty);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            if (SqlContext.Pipe != null)
            {
                SqlContext.Pipe.Send(ex.Message);
            }
        }

        return "";
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...