C# 和 Access 数据库通过名称搜索

标签 c# database ms-access

通过 InqID 搜索工作正常,但是当我提供代码以使用 InqName 进行搜索时,它给我一个错误(我猜所有连接都正确给出)谢谢.. 错误详情 System.Data.dll 中出现“System.Data.OleDb.OleDbException”类型的未处理异常

附加信息:没有为一个或多个必需参数给出值。

private void btnSearch_Click(object sender, EventArgs e)
{
    DA.SelectCommand = new OleDbCommand("SELECT * FROM INQUIREt WHERE InqID=" +txtInqID.Text, CON);
    DS.Clear();
    DA.Fill(DS);
    dataGridView.DataSource = DS.Tables[0];

    CON.Open();
    DA.SelectCommand.ExecuteNonQuery();
    CON.Close();
}

private void btnNameSearch_Click(object sender, EventArgs e)
{
    DA.SelectCommand = new OleDbCommand("SELECT * FROM INQUIREt WHERE InqName=" + txtInqName.Text, CON);
    DS.Clear();
    DA.Fill(DS);
    dataGridView.DataSource = DS.Tables[0];

    CON.Open();
    DA.SelectCommand.ExecuteNonQuery();
    CON.Close();
}

最佳答案

大多数答案告诉您应该使用参数,这很好。 他们还告诉您,如果您在其周围加上单引号,那将是正确的,这是不正确。添加单引号不是解决方案,它只适用于某些值(很多但不是全部)并且对 SQL 注入(inject)攻击很开放。

只有一种方法可以做到这一点,那就是使用参数。对于 OleDb,参数不是命名的而是位置的。但是,通过 Access ,您可以通过在命名参数前加上 @ 来使用命名参数。

private void btnSearch_Click(object sender, EventArgs e)
{
    DA.SelectCommand = new OleDbCommand("SELECT * FROM INQUIREt WHERE InqID=@ID", CON);
    DA.SelectCommand.Parameters.Add("@ID", OleDbType.VarChar).Value = txtInqID.Text;    
    DS.Clear();
    DA.Fill(DS);
    dataGridView.DataSource = null;
    dataGridView.DataSource = DS.Tables[0];
}

private void btnNameSearch_Click(object sender, EventArgs e)
{
    DA.SelectCommand = new OleDbCommand("SELECT * FROM INQUIREt WHERE InqName=@name", CON);
    DA.SelectCommand.Parameters.Add("@name", OleDbType.VarChar).Value = txtInqName.Text;
    DS.Clear();
    DA.Fill(DS);
    dataGridView.DataSource = null;
    dataGridView.DataSource = DS.Tables[0];
}

PS:您正在以一种奇怪的方式使用 DataSet 和 DataAdapter,但这是可以接受的并且有效。

关于C# 和 Access 数据库通过名称搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41257468/

相关文章:

c# - Protobuf-net 似乎是对值类型进行包装。事实是这样吗?

python - 在数据库中存储逻辑

database - 保护对从移动设备访问的数据库的访问

ms-access - 在更改事件处理程序中获取文本框值

c# - WPF 自定义 TabItem - 控件未显示在 Visual Studio 设计器中

c# - Angularjs 无法在 ASP .Net MVC 中加载数据

c# - ASP.NET MVC 项目中某些请求的巨大延迟

.net - 带有 MySQL 的 Asp.net Web 应用程序

MySql Access VB

parsing - 需要帮助编写批处理文件来读取带有空分隔符的 MS Access .ldb 锁定文件