3

複雑なクエリに Dapper を使用して、以前は NH に存在していた失われたオーバーヘッドを削除しようとしています。

次のクエリがあります(これはかなり縮小されていることに注意してください):

SELECT DISTINCT *
FROM  tasks t 
WHERE t.initials = @UserInits

これは、リポジトリ経由で次のように呼び出されます。

taskRepo.RawExec<TaskListItemDTO>(Query,new {UserInits = "SAS"})

DapperExec の実装は次のとおりです。

public IEnumerable<T> RawExec<T>(string SQL, object param)
{
   return _session.Connection.Query<T>(SQL,param);
}

しかし、Dapper はパラメーターをクエリに追加していないようで、その結果、構文エラーが発生しています。

それが役立つ場合に備えて、ODBC 経由で Informix に接続しています。

ありがとう

更新コード サンプル:

仕事が忙しくて長くなってすみません!以下は、1 または 0 のパラメーター値で sys.all_objects (systables?) を単純に照会する必要がある MS SQL (2008) サーバーのサンプルですが、このサンプルでは、​​ODBC は名前付きパラメーターを使用しないため、これは機能しません。 .

using Dapper;
using DapperSQL;
using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;

namespace DapperTests
{
    public class SQLEx
    {
        private OdbcConnection GetConnection()
        {
            var cnn = new OdbcConnection("DSN=ODBCSOURCE");
            cnn.Open();

            // wrap the connection with a profiling connection that tracks timings 
            return cnn;
        }

        public IEnumerable<object> DapperTest()
        {
            using (OdbcConnection conn = GetConnection())
            {
                return conn.Query("SELECT * FROM sys.all_objects where is_ms_shipped = ?", new { is_ms_shipped = 1 });
            }
        }
}
4

1 に答える 1

0

これは古い投稿であることはわかっています。クエリの代わりに SP を使用するだけです。ODBC ストア プロシージャを使用した Dapperのリンクを確認してください。 入力パラメーター。

于 2015-07-20T07:31:54.883 に答える