Как преобразовать varchar в тип данных изображения в SQL? - PullRequest
0 голосов
/ 02 мая 2018

У меня есть веб-приложение на C #, и его задача - отправить захваченное изображение в базу данных в байтовой форме, которая является изображением типа данных в SQL. Проблема в том, что DAL веб-сайта не позволяет мне отправлять байты через него, даже веб-сервисы не позволяют мне это делать. Поэтому я пытаюсь выяснить: что, если я преобразую байты в обычную строку, а затем в сохраненном процессе преобразую его обратно в изображение типа данных и сохраню его. Это возможно?

 ALTER PROCEDURE [dbo].[spInsertpic]
    (
        @ID             int , 
        @CapturedPhoto image -- Maybe get this << Data type as NVARCHAR and convert to data typeImage?
    )
AS

if exists (select * from tbpeople where ID=@ID)
    BEGIN
    UPDATE tbPeople 
    SET      
             DateCapturedPhoto = getdate(),
             CapturedPhoto=@CapturedPhoto
    WHERE   ( ID= @ID)

    END 
Else 

    Begin

    INSERT INTO tbPeople        (   
            ID
            , CapturedPhoto
        )
    VALUES
        (   
              @ID 
                        , @CapturedPhoto
        )
END

1 Ответ

0 голосов
/ 02 мая 2018

Чтобы выполнить эту работу, вам придется прыгнуть через несколько обручей, но общий подход заключается в том, чтобы сначала захватить изображение в строку base64.

var encodedImageString = Convert.ToBase64String(imageBytes);

Оттуда вы можете передать строку в вашу хранимую процедуру. Затем вам придется преобразовать его обратно в двоичный файл.

ALTER PROCEDURE [dbo].[spInsertpic]
(
    @ID INT, 
    @EncodedCapturedPhoto VARCHAR(MAX)
)
AS

DECLARE @CapturedPhoto IMAGE

SET @CapturedPhoto = cast(N'' as xml).value('xs:base64Binary(sql:variable("@EncodedCapturedPhoto"))', 'VARBINARY(4000)');

IF EXISTS (SELECT * FROM tbpeople WHERE ID=@ID)
BEGIN
    UPDATE tbPeople 
    SET      
             DateCapturedPhoto = getdate(),
             CapturedPhoto=@CapturedPhoto
    WHERE   ( ID= @ID)

END 
Else 

    Begin

    INSERT INTO tbPeople        (   
            ID
            , CapturedPhoto
        )
    VALUES
        (   
              @ID 
                        , @CapturedPhoto
        )
END
...