我又遇到了另一个问题。我试图使用DataReader从数据库中获取数据但我在测试代码时遇到了错误。谁能帮我吗?错误发生在这一行:
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;
}
答案 0 :(得分:2)
尝试使用不带''
的列名select something from table
而不是
select 'something' from table
<强> 2。最后关闭读者
答案 1 :(得分: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;
}
答案 2 :(得分: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的攻击。</ p>
答案 3 :(得分:0)
if (reader.HasRows)
{
while (reader.Read())
{
int result = Convert.ToInt32(reader.GetString(0));
Console.WriteLine(result);
}
}
最重要的是首先通过在SQL Server中执行来检查查询,看看是否有任何结果。 其次,根据您接收的输出类型将其转换为特定的数据类型(重要)。大多数人都将数据保存在varchar中。