2013-07-25 48 views
0

我是Oracle新手,試圖從Oracle數據庫中獲取數據。以下是我的代碼。控制檯中沒有顯示錯誤。但是在代碼中不會進入while循環。因爲我對這個人不熟悉,請幫我解決這個問題?ODP.NET無法從數據讀取器讀取數據

public void Login() 
     { 
      using (OracleConnection connection = new OracleConnection()) 
      { 
       connection.ConnectionString = ConnectionString; 

       try 
       { 
        LogManager.Info("inside login"); 
        connection.Open(); 
        OracleCommand cmd = connection.CreateCommand(); 
        cmd.Connection = connection; 

        string sql = "select ID from APRV_EMPLOYEE where USERNAME = :username "; 
        LogManager.Info("sql" + sql); 
        cmd.CommandType = CommandType.Text; 
        cmd.CommandText = sql; 
        cmd.BindByName = true; 
        cmd.Parameters.Add(":username", OracleDbType.NVarchar2).Value = "admin"; 
        IDataReader reader = cmd.ExecuteReader(); 

        LogManager.Info("Inside DatabaseManager::hasrows"); 
        while (reader.Read()) 
        { 
         LogManager.Info("Inside DatabaseManager::read" + reader.GetString(1)); 
         LogManager.Info("Inside DatabaseManager::read2" + reader.GetString(reader.GetOrdinal("ID"))); 

        } 

        reader.Dispose(); 
        cmd.Dispose(); 
       } 
       catch (Exception ex) 
       { 
        LogManager.Error("Inside DatabaseManager::Login " + ex.Message); 
       } 
      } 
     } 

請幫我提前

+0

你可以試試'cmd.Parameters.Add( 「用戶名」 ,OracleDbType.NVarchar2).Value =「admin」;',我永遠不會記得':'是否應該在那裏。 –

回答

1

感謝望着docs,這裏是它如何工作

string sql = "select ID from APRV_EMPLOYEE where USERNAME = :1 "; 
LogManager.Info("sql" + sql); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = sql; 
// cmd.BindByName = true; 
cmd.Parameters.Add("username", OracleDbType.NVarchar2).Value = "admin"; 
IDataReader reader = cmd.ExecuteReader(); 
+0

甚至「從APRV_EMPLOYEE選擇ID」始終reture raeder.HasRows即使在數據庫中有一個條目false ..請幫助.. – ramesh

+0

在這種情況下,您是否連接到相同的數據庫(在代碼中與查詢編輯器相比,哪裏你可以看到記錄)? – shahkalpesh

+0

謝謝..當我在Oracle SQL開發人員嘗試查詢並運行查詢時,它顯示行很好。連接相同的數據庫 – ramesh