SQL使用DataReader从数据库问题中读取数据

时间:2010-07-20 16:50:03

标签: c# sql database arraylist sqldatareader

我有一个用户表(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]

3 个答案:

答案 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语句将无法正确执行。