我有一个用户表(tblUsers),其中包含大学员工的详细信息。我正在尝试使用与所选模块关联的讲师姓名填充文本框。
我获取与特定模块关联的所有UserID,测试User是否是讲师,如果是,那么我将ID添加到ArrayList。
然后我迭代遍历这个数组,并在每次迭代过程中调用下面的方法来传递当前的ID。
但是,如果您查看下面的方法,我使用的是SqlDataReader,并且在此行读取时遇到错误:
txtLecturerName.Text + = myReader [“First_Name”]。ToString();
错误消息是: 'myReader [“First_Name”]'引发了'System.IndexOutOfRangeException'类型的异常
我正在使用的表格布局位于方法代码下方。对此有任何帮助将不胜感激,我是一杯咖啡,远离我的头穿过屏幕。
public void outputLecturerNames(string lecturerID)
{
// Create a new Connection object using the connection string
SqlConnection myConnection = new SqlConnection(conStr);
// If the connection is already open - close it
if (myConnection.State == ConnectionState.Open)
{
myConnection.Close();
}
// 'using' block allows the database connection to be closed
// first and then the exception handling code is triggered.
// This is a better approach than using a 'finally' block which
// would close the connection after the exception has been handled.
using (myConnection)
{
try
{
// Open connection to DB
myConnection.Open();
SqlCommand selectCommand = new SqlCommand(selectQuery, myConnection);
// Declare a new DataReader
SqlDataReader myReader;
selectQuery = "SELECT * FROM tblUsers WHERE User_ID='";
selectQuery += lecturerID + "'";
myReader = selectCommand.ExecuteReader();
while (myReader.Read())
{
txtLecturerName.Text += myReader["First_Name"].ToString();
txtLecturerName.Text += " ";
txtLecturerName.Text += myReader["Last_Name"].ToString();
txtLecturerName.Text += " , ";
}
myReader.Close();
}
catch (Exception err)
{
Console.WriteLine("Error: " + err);
}
}
}
向tblUsers:
[User_ID][First_Name][Last_Name][Email_Address]
答案 0 :(得分:3)
在您的方法中,未声明变量selectQuery,并且在将其分配给tblUsers上的查询字符串之前,它将用作SqlCommand的参数。
答案 1 :(得分:0)
您可能拼错了列名。
一般来说,你永远不应该写SELECT * FROM ...
相反,您应该只选择所需的列。
这样只需查询您需要的信息,就可以让您的程序运行得更快,并且可以产生更好的错误消息。
答案 2 :(得分:0)
如果找不到给定的列名,则会创建此错误。如果你像我一样,你可能已经多次检查过,但是表名是否正确(正确的数据库,正确的模式)并且列名是否正确?
http://msdn.microsoft.com/en-us/library/f01t4cfy.aspx
您可以尝试完全限定表的名称(database.dbo.tblUsers)。这样可以确保你打到你认为自己的桌子。另外,尝试将列的名称放入SQL语句中。如果它们不正确,则SQL语句将无法正确执行。