2015-10-26 23 views
0

我寫一個函數來讀取SQL數據庫中的數據,該函數如下DbDataReader,返回時SqlDataCommand.ExecuteReader()

public override Dictionary<string, DbDataReader> GetData() 
{ 
    using (_connection) 
    { 
     Dictionary<string, DbDataReader> dataDictionary = new Dictionary<string, DbDataReader>(); 
     _xmlDoc.Load("Queries.xml"); 
     XPathNavigator navigator = _xmlDoc.CreateNavigator(); 
     XPathNodeIterator iterator = navigator.Select("//query"); 
     while (iterator.MoveNext()) 
     { 
      _command = new SqlCommand(iterator.Current.ToString()); 
      _command.Connection = _connection; 
      _command.CommandText = iterator.Current.ToString(); 
      SqlDataReader reader = _command.ExecuteReader(); 

      dataDictionary.Add(iterator.Current.GetAttribute("name", ""), reader); 
     } 
     return dataDictionary; 
    } 
} 

但我得到一個編譯器錯誤,指出:

無法將源類型「system.data.common.dbdatareader」爲目標 型「system.data.sqlclient.sqldatareader」

但我查個ËMSDN:https://msdn.microsoft.com/en-us/library/9kcbe65k(v=vs.110).aspx

凡說的ExecuteReader的返回類型()是 'system.data.sqlclient.sqldatareader'

任何人可以幫助我嗎?謝謝!

回答

1

更新你的代碼替換DbDataReader到的IDataReader ..

public Dictionary<string, IDataReader> GetData() 
    { 
     using (_connection) 
     { 
      Dictionary<string, IDataReader> dataDictionary = new Dictionary<string, IDataReader>(); 
      _xmlDoc.Load("Queries.xml"); 
      XPathNavigator navigator = _xmlDoc.CreateNavigator(); 
      XPathNodeIterator iterator = navigator.Select("//query"); 
      while (iterator.MoveNext()) 
      { 
       _command = new SqlCommand(iterator.Current.ToString()); 
       _command.Connection = _connection; 
       _command.CommandText = iterator.Current.ToString(); 
       IDataReader reader = _command.ExecuteReader(); 

       dataDictionary.Add(iterator.Current.GetAttribute("name", ""), reader); 
      } 
      return dataDictionary; 
     } 

    } 
1

您的方法正在尋找返回類型Dictionary<string, DbDataReader>,但您要返回Dictionary<string, SqlDataReader>

public override Dictionary<string, DbDataReader> GetData() 
{ 
    using (_connection) 
    { 
     Dictionary<string, DbDataReader> dataDictionary = new Dictionary<string, DbDataReader>(); 
     xmlDoc.Load("Queries.xml"); 
     XPathNavigator navigator = _xmlDoc.CreateNavigator(); 
     XPathNodeIterator iterator = navigator.Select("//query"); 
     while (iterator.MoveNext()) 
     { 
      DbCommand _command = db.GetSqlStringCommand(iterator.Current.ToString()); 
      IDataReader dataReader = db.ExecuteReader(_command); 

       dataDictionary.Add(iterator.Current.GetAttribute("name", ""), dataReader); 
     } 
     return dataDictionary; 
    } 
} 
+0

即使我改了簽名,這個錯誤依然存在。我之所以使用這個簽名是因爲我想重寫一個基本函數,以便我可以用sql和oracle數據庫執行相同的執行。像聲明:http://stackoverflow.com/questions/33341435/override-a-method-return-type-dbdatareader-and-return-a-different-typesqldbda – Gravity

+0

我沒有注意到你重寫了一種方法。所以基本上,你不能像在while循環中那樣將SqlDataReader添加到字典中。它必須是一個DbDataReader。 –

+0

我對代碼進行了更新。這應該返回你適當的類型。 –