【问题标题】:How to convert varchar to image datatype in SQL?如何在 SQL 中将 varchar 转换为图像数据类型?
【发布时间】:2018-10-12 21:20:34
【问题描述】:

我有一个 C# Web 应用程序,它的工作是以字节形式将捕获的图像发送到数据库,这是 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

【问题讨论】:

  • 为什么你的 DAL 不允许你通过它发送字节数组?
  • 公司的安全原因我无法改变系统太大,他们都基于 DAL,这就是我必须解决它的原因

标签: sql image type-conversion sql-server-2014 sqldatatypes


【解决方案1】:

您将不得不跳过几圈才能完成这项工作,但一般方法是首先将图像捕获到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

【讨论】:

  • 让我试一试。
  • 好吧,当我尝试运行 SQL 脚本时它给了我错误,它说 DECLARE @CapturedPhoto IMAGE 错误:文本、ntext 和图像数据类型对局部变量无效。
  • @Maxi 我更新了解决方案以使用VARBINARY 而不是IMAGE。您可能仍需要进行一些调整。您也可以查看:social.technet.microsoft.com/wiki/contents/articles/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
相关资源
最近更新 更多