字段验证规则中的“喜欢”运算符不适用于 OLEDB 插入

Posted

技术标签:

【中文标题】字段验证规则中的“喜欢”运算符不适用于 OLEDB 插入【英文标题】:'Like' operator in field validation rule not working for OLEDB inserts 【发布时间】:2017-08-28 17:27:56 【问题描述】:

首先,我不是程序员,我这样做是为了一个工作中的小项目(我是客户服务团队的负责人)。

我使用以下验证规则创建了一个 Access 数据库:Like "T######" 为了只接受我们的员工 ID(例如 T123456) 它在 Access 中运行良好。

但是,在 C# 中,我的提交按钮上有以下代码:

private void btnSubmit_Click(object sender, RoutedEventArgs e)
    
        try
        
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "insert into Employees (ID, LastName, FirstName) values ('" + txtTID.Text + "','" + txtLastName.Text + "','" + txtFirstName.Text + "')";

            command.ExecuteNonQuery();
            connection.Close();
        
        catch (Exception ex)
        
            MessageBox.Show("" + ex);
            connection.Close();
        

    

每当我输入类似上述example 的内容时,我都会收到Error Message 表示由于验证规则而无法插入数据。

我尝试使用不同的通配符 (*),但它仍然不起作用。我在这里有什么明显的遗漏吗?

非常感谢您的帮助,祝您有美好的一天!

【问题讨论】:

你能包含错误信息吗? 您的代码存在SQL Injection 的风险。您应该使用带参数的准备好的查询。即使您只是为了好玩,它也很有用,因为它可以优雅地处理名称包含' 的情况。 @developer_117 添加了错误消息 :) 感谢您的快速回复! 您在代码中的哪个位置使用了LIKE 关键字和sql 通配符,例如% % @MethodMan 对不起,如果我不清楚,验证规则直接在 Access 中而不是在代码中。 【参考方案1】:

您遇到了 Access OLEDB 提供程序的限制。如果您切换到使用 System.Data.Odbc 和 Access ODBC 驱动程序,您的代码应该可以正常工作。

【讨论】:

与 ODBC 完美配合,谢谢!我用connectionstrings.com/microsoft-access-accdb-odbc-driver/…【参考方案2】:

很抱歉,我无法给您写评论。你的桌子上有一个验证规则。这意味着问题不在于您的查询,而在于您的表架构师。例如,您尝试插入的数据可能与您的字段的数据类型不匹配 见this for more info

【讨论】:

以上是关于字段验证规则中的“喜欢”运算符不适用于 OLEDB 插入的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:有时规则不适用于输入类型=文件

最小最大价格范围验证不适用于 jquery.validate.js

Laravel 表单请求验证规则“必需”不适用于空值

Azure Api 规则不适用于使用具有身份验证基本和身份验证证书的默认助手

表单验证适用于 2 个字段,但不适用于第 3 个字段 - 是啥破坏了验证检查

Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证