如何使用程序保存byte []?

Gad*_*ski 8 sql-server telerik telerik-open-access

这个存储过程不保存数据,这似乎是一个问题VARBINARY.我正在传递byte[]给它,但它不起作用.如果我发送此参数,NULL它的工作原理.

我用以下代码调用该过程:

public Community AddCommunity(string name, string description, byte[] picture, User owner, int? venue, int communityID) 
{
    using (var database = new Database())
    {
        return database.Scope.GetSqlQuery<Community>("QP_AddCommunity ?, ?, ?, ?, ?, ?", "VARCHAR Name, VARCHAR Description, VARBINARY Picture, INTEGER Owner, INTEGER Venue, INTEGER ID").GetResult(name, description, picture, owner.ID, venue, communityID);
    }
}
Run Code Online (Sandbox Code Playgroud)

程序如下:

CREATE PROCEDURE [dbo].[QP_AddCommunity]
    @Name VARCHAR(120),
    @Description VARCHAR(MAX),
    @Picture VARBINARY(MAX),
    @Owner INTEGER,
    @Venue INTEGER,
    @ID INTEGER

AS
BEGIN
    SET NOCOUNT ON;

    IF(SELECT COUNT(*) FROM QT_Community WHERE ID = @ID) = 0
        INSERT INTO QT_Community(Name, [Description], Picture, [Owner], Venue) VALUES(@Name, @Description, @Picture, @Owner, @Venue);

    ELSE
        UPDATE QT_Community SET Name = @Name, [Description] = @Description, Picture = @Picture, [Owner] = @Owner, Venue = @Venue WHERE ID = @ID;

    SELECT * FROM QT_Community WHERE ID = @@IDENTITY;


END
Run Code Online (Sandbox Code Playgroud)

这段代码出了什么问题?是不是VARBINARY一个byte[]


此代码在SQL Server Management Studio上执行时有效.

DECLARE @X varbinary(20)
Set @X = CAST('Testing' As varbinary(20))
EXECUTE [QP_AddCommunity] 'aaaaa', 'descricao', @X, 216, NULL, 0;
Run Code Online (Sandbox Code Playgroud)

但是,当从事务中调用GetSqlQuery某个byte[]事务时,它说它不活跃而且不脏.但是,如果byte[]null它的工作原理,因为它应该.

Gad*_*ski 5

我发现这是不可能的,因为这个答案显示

您好gaurav,目前我们的GetSqlQuery方法无法使用LongVarBinary或VarBinary类型的参数正常运行,因此存储过程无法按预期工作.我们知道这个问题,我们正在努力解决它.作为一种解决方法,您应该尝试使用Linq来实现您的目标.问候,Telerik团队的Petar