BLOB 및 SQL Server CE에서 Dapper 사용

blob dapper sql-server-ce

문제

8000 바이트 이상의 데이터가있는 BLOB를 사용할 때는 Parameter.SqlDbType = SqlDbType.Image 를 설정하여 작동하게하십시오 ( 여기에서 설명 ).

Dapper는 byte[] 필드를 볼 때 기본값이 SqlDbType.Binary 기본 설정됩니다. 즉, 더 큰 blob의 경우 데이터 잘림 오류로 인해 삽입 및 업데이트가 실패합니다.

이 문제에 대한 우아한 해결책이 있습니까? 내가 볼 수있는 유일한 옵션은 ADO.NET 메서드로 전체 트랜잭션을 코딩하는 것입니다.

인기 답변

나는 똑같은 문제가 있었다. 다음과 같이 해결됨 :

private static IDbCommand SetupCommand(IDbConnection cnn, IDbTransaction transaction, 
                                       string sql, Action<IDbCommand, object> paramReader, 
                                       object obj, int? commandTimeout, 
                                       CommandType? commandType)
{
    var cmd = cnn.CreateCommand();
    var bindByName = GetBindByName(cmd.GetType());
    if (bindByName != null) bindByName(cmd, true);
    if (transaction != null)
        cmd.Transaction = transaction;
    cmd.CommandText = sql;
    if (commandTimeout.HasValue)
        cmd.CommandTimeout = commandTimeout.Value;
    if (commandType.HasValue)
        cmd.CommandType = commandType.Value;
    if (paramReader != null)
    {
        paramReader(cmd, obj);
    }
    //CODTEC SISTEMAS
    foreach (System.Data.SqlServerCe.SqlCeParameter item in cmd.Parameters)
    {
        if (item.SqlDbType == System.Data.SqlDbType.VarBinary)
            item.SqlDbType = System.Data.SqlDbType.Image;
    }
    //CODTEC SISTEMAS
    return cmd;
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.