显示来自“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# 表单的主要内容,如果未能解决你的问题,请参考以下文章