2012-06-11 152 views
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.run爲MYDB類期待dbparams列表是mysqlparameters的。

有誰知道我該如何做到這一點?我試圖用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; 
     } 
    } 
+0

我猜你應該在else分支中創建並打開SqlCeConnection到sdf文件。也許這在_OfflineConnection內部實現,但是這並不明確。 – kol

+0

@kol這裏的問題是隻有這部分代碼,所有其他句柄已經覆蓋 – Neo

回答

2

有點清潔的解決方案將是

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

而且,你應該檢查並處理dbparams的空條件。

+0

謝謝Eren,我現在有另一個問題,因爲我不能使用using()語句處理代碼整齊:( – Neo