0

私のプロジェクトでは、SQL から大量のデータを取得し、そのデータをオブジェクト フィールドにマップする必要があります。このようなもの:

cu.UnitName = dr["UnitName"].ToString().Trim();
cu.LocalId = DbUtil.RemoveNull(dr["LocalID"], "");
cu.DatabaseName = DbUtil.RemoveNull(dr["DatabaseName"], "");
cu.DatabaseServer = DbUtil.RemoveNull(dr["DatabaseServer"], "");
cu.UserName = DbUtil.RemoveNull(dr["UserName"], "");
cu.Password = DbUtil.RemoveNull(dr["Password"], "");
cu.RoleId = DbUtil.RemoveNull(dr["RoleId"], 0);

DbUtil.RemoveNull次のとおりです (intバージョン、stringバージョンは同様です):

public static int RemoveNull(object data, int defaultValue)
    {
        if (data is DBNull || data == null)
            return defaultValue;
        return int.Parse(data.ToString());
    }

だから私は、SQLのCOALESCEまたはISNULL同じ仕事をより速く行うのだろうかと思います。誰かが同様の比較をしましたか?どちらの方法がより効率的でしょうか?

4

4 に答える 4

0

データベースからデータを返すときに、次のことができます

select COALESCE (data ,defaultValue) from table

フロントエンドコードからRemoveNull関数を実行する必要がないため、そのほうが高速です

于 2012-08-17T06:59:48.130 に答える
0
cu.LocalId = dr["LocalId"] ?? "";
于 2012-08-17T07:01:12.387 に答える
0

代わりに、SQL で次のステートメントを使用します。

SELECT ISNULL(value,0)

NULL がある場合、これは常に 0 を返します。したがって、コード側で変換する必要はありません。

http://msdn.microsoft.com/en-us/library/ms184325.aspxを参照してください。

于 2012-08-17T07:02:30.423 に答える
0

' COALESCE ' は、その引数の中で最初の非 null 式を返すため、おそらく を使用しますISNULL

ISNULLデータベースクエリで使用すると、はるかに高速になります。100 万件のレコードがあり、C# メソッドを 100 万回呼び出すと想像してください。実行には確かに時間がかかります。

一方、SQL エンジンは、多数のレコードを処理するように最適化されています。しかし、これでは十分な柔軟性が得られません。複雑なロジックを使用したり、デフォルト値を簡単に変更したりすることはできません。

于 2012-08-17T07:04:26.990 に答える