2

要するに、私は自分で書いているいくつかのソフトウェアのデータベース統合を処理するクラスハンドラーを書いていますが、リモートデータベースへの接続が常にあるとは限らないため、SQLCEを使用してローカルデータベースバッファーを作成すると思いました。変更を同期することができます。

これまでのところ、パラメータを除いて順調に進んでいます。私が呼び出しようとしている関数を以下に示しますが、この関数は無効な引数について文句を言っています。

public Object run(string query, List<Object> dbparams = null)
    {
        if (MyDB.isConnected())
        {
            return MyDB.run(query, dbparams);
        }
        else
        {
            SqlCeCommand sql = _OfflineConnection.CreateCommand();
            sql.CommandText = query;
            if (dbparams.Count > 0)
            {
                sql.Parameters.AddRange(dbparams.ToArray());
            }
            return sql;
        }
    }

MyDB.runは、mysqlを除いてelseステートメントとまったく同じコードです。mydbクラスはdbparamsリストがmysqlparametersであることを期待しているため、うめき声​​を上げている行はreturnmydb.runです。

誰かが私がこれを達成する方法を知っていますか?LINQを使用して変換を実行しようとしましたが、失敗しました。

編集

現在、私は次のように働いていますが、よりクリーンな解決策があると確信しています

public Object run(string query, List<Object> dbparams = null)
    {
        if (MyDB.isConnected())
        {
            List<MySqlParameter> mydbparams = null;
            for (int i = 0; i < dbparams.Count; i++)
            {
                mydbparams.Add((MySqlParameter)dbparams[i]);
            }
            return MyDB.run(query, mydbparams);
        }
        else
        {
            SqlCeCommand sql = _OfflineConnection.CreateCommand();
            sql.CommandText = query;
            if (dbparams.Count > 0)
            {
                sql.Parameters.AddRange(dbparams.ToArray());
            }
            return sql;
        }
    }
4

1 に答える 1

2

少しクリーンな解決策は

mydbparams = dbparams.Cast<MySqlParameters>().ToList();

また、のnull条件を確認して処理する必要がありますdbparams

于 2012-06-11T20:46:11.797 に答える