8

このストアドプロシージャはデータを保存しません。に問題があるよう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 ServerManagementStudioで実行するときに機能します。

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

しかし、トランザクションGetSqlQueryに何かがあるメソッドから呼び出すとbyte[]、それはアクティブではなく、ダーティでもないと表示されます。しかし、それbyte[]が正常nullに機能する場合。

4

4 に答える 4

5

この答えが示すように私はそれが不可能であることがわかりました

こんにちはgaurav、現在、GetSqlQueryメソッドはタイプLongVarBinaryまたはVarBinaryのパラメーターで正しく動作できないため、ストアドプロシージャが期待どおりに機能することはできません。私たちはこの問題を認識しており、修正に取り組んでいます。回避策として、Linqを使用して目標を達成する必要があります。あいさつ、PetartheTelerikチーム

于 2010-09-24T17:51:58.153 に答える
1

この表によればBLOB、、、のBINARYいずれかVARBINARYがの有効な型であるように思われ[] of primitive typeます。

あなたは彼らのフォーラムで尋ねることを試みることができます、多分誰かがあなたを助けることができるでしょう。

于 2010-09-24T16:20:14.100 に答える
0

.WRITEメソッドを使用してみてください。INSERTで、Pictureに0xを挿入してから、個別に更新します。

UPDATE QT_Community 
    SET Picture.Write (@Picture, 0, DATALENGTH(Picture))
    WHERE ID = @ID
于 2010-09-24T14:29:36.440 に答える
0

例(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++;
}

} 
于 2010-09-24T17:20:08.137 に答える