2014-03-04 66 views
2

我再次遇到另一個問題。我試圖使用DataReader從數據庫中獲取數據,但是當我測試代碼時出現錯誤。誰能幫我嗎?錯誤發生在此行:DataReader IndexOutofRangeException未被用戶代碼處理

chkAssess = readAssess [columnName] .ToString();

下面的代碼片段:

public string CheckAssess(string emailAddress, string columnName) 
{ 
    string chkAssess = ""; 
    SqlDataReader readAssess; 
    //readAssess = new SqlDataReader(); 

    string MgrAssessQry = "SELECT '"+columnName+"' FROM tblAllUsers"; 
    //MgrAssessQry += " WHERE email ='" + emailAddress + "'"; 

    SqlCommand cmdReadAssess = new SqlCommand(MgrAssessQry, cn); 
    cn.Open(); 
    readAssess = cmdReadAssess.ExecuteReader(); 

    while(readAssess.Read()) 
    { 
     // Add the rows 
     chkAssess = readAssess[columnName].ToString();   
    } 

    return chkAssess; 
} 

回答

1

嘗試使用列名不'

select something from table 

,而不是

select 'something' from table 
  1. 的,不要安全原因」以這種方式創建sql查詢(通過con catenating字符串) - 使用@參數,而不是

2.接近讀者末

2

試試這個:

public string CheckAssess(string emailAddress, string columnName) 
{ 
string chkAssess = ""; 
SqlDataReader readAssess; 
//readAssess = new SqlDataReader(); 

string MgrAssessQry = "SELECT @Column_Name FROM tblAllUsers"; 

SqlCommand cmdReadAssess = new SqlCommand(MgrAssessQry, cn); 
cmdReadAssess.Parameters.AddWithValue(new SqlParameter("Column_Name", columnName)); 
cn.Open(); 
readAssess = cmdReadAssess.ExecuteReader(); 

while(readAssess.Read()) 
{ 
    // Add the rows 
    chkAssess = readAssess.GetString(0); 
} 

return chkAssess; 
} 
1

您在這裏有幾個問題。

檢查您的readAssess是否有如下所示的行。

if(readAssess.HasRows) 

如果它不具有行則試圖

chkAssess = readAssess.GetString(0); 

會拋出這個錯誤,因爲Arrays是基於索引的。

所以,你的代碼應該像下面

if(readAssess.HasRows) 
{ 
    while(readAssess.Read()) 
    { 
     chkAssess = readAssess.GetString(0); 
    } 
} 

另一個問題是,你需要事後關閉兩個讀者&的連接。

readAssess.Close(); 
cn.Close(); 

此外,您的代碼可能容易受到SQL Injection的影響。

0
if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        int result = Convert.ToInt32(reader.GetString(0)); 
        Console.WriteLine(result); 
       } 
      } 

最重要的事情是在SQL Server中執行先檢查查詢,看看是否有任何結果來不來。其次根據您接收到的輸出類型將其轉換爲該特定的數據類型(重要的)。大多數情況下,每個人都將數據保存在varchar中。

相關問題