如何使用程序保存字节[]?
-
05-10-2019 - |
题
此存储过程无法保存数据,似乎是 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);
}
}
该过程如下:
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
此代码怎么了?不是 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;
但是当从 GetSqlQuery
方法与某物 byte[]
交易说这不活跃,也不脏。但是,如果是 byte[]
是 null
它应尽其所能。
解决方案
我发现这是不可能的 这个答案 显示
Hello Gaurav,目前我们的GetQlquery方法无法使用longvarbinary或varbinary的类型参数正常运行,因此使存储过程无法按预期工作。我们知道这个问题,我们正在努力解决问题。作为周围的工作,您应该尝试使用LINQ实现目标。问候,PETAR TELERIK团队
其他提示
尝试使用 .write方法. 。在您的插件上,插入0x以获取图片,然后独立更新。
UPDATE QT_Community
SET Picture.Write (@Picture, 0, DATALENGTH(Picture))
WHERE ID = @ID
示例(ado.net):
byte[] ba = UlongsToBytes(ul);
try
{
string source = @"packet size=4096;integrated security=SSPI;data source=MyPC\MyNamedInstance;persist security info=False;initial catalog=Sandbox";
SqlConnection conn = new SqlConnection(source);
conn.Open();
SqlCommand a = new SqlCommand("INSERT BigintsTarget(bi) SELECT * FROM dbo.ParseImageIntoBIGINTs(@BIGINTs)", conn);
a.CommandType = System.Data.CommandType.Text;
a.Parameters.Add(new SqlParameter("@BIGINTs", System.Data.SqlDbType.Image,2147483647));
for(int q=0; q<10; q++)
{
a.Parameters[0].Value = ba;
int res = a.ExecuteNonQuery();
}
d2 = DateTime.Now;
SqlCommand b = new SqlCommand("INSERT BigintsTarget1(bi) SELECT * FROM dbo.ParseVarcharMAXIntoBIGINTs(@BIGINTs)", conn);
b.CommandType = System.Data.CommandType.Text;
b.Parameters.Add(new SqlParameter("@BIGINTs", System.Data.SqlDbType.VarChar,2147483647));
for(int q=0; q<10; q++)
{
b.Parameters[0].Value = sss;
int res = b.ExecuteNonQuery();
}
//b.ExecuteNonQuery();
conn.Close();
}
catch(Exception ex)
{
string s = ex.Message;
int t=0;
t++;
}
}
不隶属于 StackOverflow