Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DataReader从数据库读取SQL时出现问题_C#_Sql_Database_Arraylist_Sqldatareader - Fatal编程技术网

C# 使用DataReader从数据库读取SQL时出现问题

C# 使用DataReader从数据库读取SQL时出现问题,c#,sql,database,arraylist,sqldatareader,C#,Sql,Database,Arraylist,Sqldatareader,我有一个用户表(tblUsers),其中包含大学员工的详细信息。我试图用与所选模块相关的讲师姓名填充一个文本框 我获取与特定模块关联的所有用户ID,测试该用户是否是讲师,如果是,则将该ID添加到ArrayList中 然后我遍历这个数组,并在每次遍历当前ID的过程中调用下面的方法 但是,如果您查看下面的方法,我使用的是SqlDataReader,在这一行中读取时出错: Text+=myReader[“First_Name”].ToString() 错误消息是: “myReader[“First_N

我有一个用户表(tblUsers),其中包含大学员工的详细信息。我试图用与所选模块相关的讲师姓名填充一个文本框

我获取与特定模块关联的所有用户ID,测试该用户是否是讲师,如果是,则将该ID添加到ArrayList中

然后我遍历这个数组,并在每次遍历当前ID的过程中调用下面的方法

但是,如果您查看下面的方法,我使用的是SqlDataReader,在这一行中读取时出错:

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]

您可能拼错了一个列名

一般来说,您不应该编写
SELECT*FROM…

相反,您应该只选择所需的列


这将使您的程序运行更快,只需查询您需要的信息,并且可以生成更好的错误消息。

您可能拼错了列名

一般来说,您不应该编写
SELECT*FROM…

相反,您应该只选择所需的列


这将使您的程序运行更快,只需查询您需要的信息,并且可以生成更好的错误消息。

当找不到给定的列名时,会创建此错误。如果您和我一样,您可能已经检查过几次了,但是表名正确(正确的数据库、正确的模式)和列名正确吗


您可以尝试完全限定表名(database.dbo.tblUsers)。这将确保你在打你认为你是的那张桌子。另外,尝试将列的名称放入SQL语句中。如果它们不正确,您的SQL语句将无法正确执行。

当找不到给定的列名时,将创建此错误。如果您和我一样,您可能已经检查过几次了,但是表名正确(正确的数据库、正确的模式)和列名正确吗



您可以尝试完全限定表名(database.dbo.tblUsers)。这将确保你在打你认为你是的那张桌子。另外,尝试将列的名称放入SQL语句中。如果它们不正确,您的SQL语句将无法正确执行。

在您的方法中,变量selectQuery没有声明,在tblUsers上分配查询字符串之前,它被用作SqlCommand的参数。

在您的方法中,变量selectQuery没有声明,在tblUsers上为其分配查询字符串之前,它被用作SqlCommand的参数。

tblUsers的结构是什么?错误表明没有名为:First_Name.Hi Fosco的列,列名称按正确顺序列在方法代码下面。谢谢一个旁注-非常小心地连接用户输入字符串,或者更好地参数化查询或使用ORM工具。如果从SQL语句中删除where子句,会发生什么?我想知道讲师ID中是否有什么东西导致SQL语句被修改(SQL注入类型的东西)。另外,如果使用索引0,会发生什么情况?在您对devio的回复中,您说您尝试了索引1。谢谢大家!你们都很棒!如果你看一下这个方法,你会发现我在分配selectQuery之前愚蠢地声明了我的SqlCommand,这意味着我在查询中使用了错误的select语句——因此出现了IndexOutOfRange异常。再次感谢。tblUsers的结构是什么?错误表明没有名为:First_Name.Hi Fosco的列,列名称按正确顺序列在方法代码下面。谢谢一个旁注-非常小心地连接用户输入字符串,或者更好地参数化查询或使用ORM工具。如果从SQL语句中删除where子句,会发生什么?我想知道讲师ID中是否有什么东西导致SQL语句被修改(SQL注入类型的东西)。另外,如果使用索引0,会发生什么情况?在您对devio的回复中,您说您尝试了索引1。谢谢大家!你们都很棒!如果你看一下这个方法,你会发现我在分配selectQuery之前愚蠢地声明了我的SqlCommand,这意味着我在查询中使用了错误的select语句——因此出现了IndexOutOfRange异常。再次感谢。您好,devio,您好,很抱歉之前没有说出来,但我已在方法之外声明了字符串selectQuery。@Frank在您将selectQuery分配给SqlCommand时,它的内容是什么?您在创建commandHAHA之后设置了tblUsers查询语句!!我是第一百万次一行一行地走过去才发现这一点的!我愚蠢的错误是在分配selectQuery之前声明SqlCommand。我从错误的结果中读取数据。谢谢你的帮助!您好,devio,您好,很抱歉之前没有这么说,但我已在方法之外声明了字符串selectQuery。@Frank在您将selectQuery分配给SqlCommand时,它的内容是什么?您在创建commandHAHA之后设置了tblUsers查询语句!!我是第一百万次一行一行地走过去才发现这一点的!我愚蠢的错误是在分配selectQuery之前声明SqlCommand。我从错误的结果中读取数据。谢谢你的帮助!谢谢Slaks,我只是想首先让代码功能化,然后我打算让它更高效——谢谢你的建议。虽然它看起来不是一个列名…谢谢Slaks,我只是想得到代码