Sybase ASEで厳密に型指定されたクエリパラメータを使用する場合、Dapperが無効なキャスト例外をスローする

c# dapper

質問

質問のタイトルが述べるように、私はストアドプロシージャがintDateTimeを返すにもかかわらず、 Specified cast is not valid例外でSpecified cast is not valid 、クラスはそれを同じものとして定義します。

public class Foo
{
    public int Id {get; set;}
    public DateTime CreatedDate {get; set;}
}

このクエリを実行すると:

var results = connection.Query( "spGetFoo"、commandType:CommandType.StoredProcedure);

私は次の2つの例外を受け取ります:

InvalidCastException: Specified cast is not valid.
DataException: Error parsing column 1 (Id=1 - Decimal)

InvalidCastException: Specified cast is not valid.
DataException: Error parsing column 2 (CreatedDate=Mar  7 2012  5:52:08:276PM - String)

FooのプロパティをintからdecimalおよびDateTimeに変更すると、 stringに正しく値が設定されます。しかしこれは、正しい変数型を保持している別のクラスを定義し、次にFooから新しいクラスにマッピングする追加のステップを導入します。

また、DapperソースのGetTypeDeserializerを試してGetTypeDeserializerて、何が起こっているのか見てみましたが、私はILによく慣れていません。

人気のある回答

おそらく、問題はストアドプロシージャにありますが、その間は

public class Foo
{
    private decimal _dbId;
    public decimal DbId 
    { 
        get { return _dbId; }
        set 
        { 
            _dbId = value;
            _id =(int)value;
        }
    }
    private String _dbCreadtedDate;
    public String DbCreadtedDate 
    { 
        get { return _dbCreadtedDate; }
        set 
        {
            _dbCreadtedDate = value;
            _createdDate = DateTime.Parse(_dbCreadtedDate);
        }
    }
    private int _id;
    public int Id 
    { 
        get { return _id; } 
        set { _id = value; _dbId = value; } 
    }
    private DateTime _createdDate;
    public DateTime CreatedDate 
    { 
        get { return _createdDate; } 
        set { _createdDate = value; _dbCreadtedDate = value.ToString(); } 
    }
}


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ