显示来自“System.Data.OleDb.OleDbDataReader”的“字符串”。访问数据库到 C# 表单

Posted

技术标签:

【中文标题】显示来自“System.Data.OleDb.OleDbDataReader”的“字符串”。访问数据库到 C# 表单【英文标题】:Display a 'string' from 'System.Data.OleDb.OleDbDataReader'. Access Database to C# Form 【发布时间】:2015-03-24 15:25:51 【问题描述】:

试图从 Access 数据库中显示一个值以显示在表单的 ListBox 上。前一个表单向该表单发送一个字符串“prevval”- 以供参考代码。不完全确定问题是什么?请帮忙!! QuestionID 在技术上是一个数字,但如果我将其设为字符串,因为它出现在 ListBox 上,这是否是个问题?

错误 System.Data.OleDb.OleDbException (0x80040E10): 没有给出值 用于一个或多个必需参数

代码:

       try
        
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string query = "SELECT QuestionID FROM tblQuestions WHERE (Topic='" + prevval + "')";
            command.CommandText = query;
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read())
            
                listQuestions.Items.Add(reader.ToString());
            
            connection.Close();
        
        catch (Exception ex)
        
            MessageBox.Show("Error " + ex);
        

【问题讨论】:

Topic 列的类型是什么,prevval 的值究竟是什么?当然,您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。同样reader.ToString() 返回它的完整类名,而不是其中的数据。您需要使用reader[0] 或作为更好的GetXXX 方法。 哪里抛出了异常? prevval 可以根据不同的词而有所不同,根据词的不同,将取决于获取的是什么 QuestionID 以及接下来显示的内容。 改变 listQuestions.Items.Add(reader.ToString());到 listQuestions.Items.Add(reader[0]);解决了我的问题,谢谢! 【参考方案1】:

试试这个

listQuestions.Items.Add(reader["QuestionID"].ToString());

【讨论】:

没错,但这不是这个异常的原因。 正确。我假设 prevval 正确地作为字符串传递并且有一个值。

以上是关于显示来自“System.Data.OleDb.OleDbDataReader”的“字符串”。访问数据库到 C# 表单的主要内容,如果未能解决你的问题,请参考以下文章

如何显示日期来自jQuery instated显示当前日期?

Flutter:显示来自 json 的数据

当应显示来自 firestore 的数据时,列表显示为空

通过属性显示来自特定标签的项目

显示来自 viewDidLoad 的警报消息

在 ListView 中显示来自 url 的可绘制图像