2014-03-04 43 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中。

相关问题