0

下面是一个访问数据库并提取与数据库中类似的 controlNumber 的函数。正如您在靠近顶部的注释掉部分看到的那样,我想用通配符指示符 ( ) 替换 controlNumber 的最后 3 位数字,这样它只会在数据库中搜索类似于该行下方的 controlnumbers ("1289 * *")

在数据库中,我可以使用查询“SELECT * FROM Orders WHERE Con​​trol_Number LIKE '1298***';” 我得到了正确的信息。但是当我使用这种方法在代码中尝试它时,我返回了 0 行。

有什么帮助吗?

注意:我要访问 Access 数据库,而不是 mysql

public string ABSCheckControlNumberForAccuracy(string _controlNumber,string _zip,string _state, string _city)
        {
            //_controlNumber = _controlNumber.Remove(_controlNumber.Length - 3) + "***";
            _controlNumber = "1298***";
            OleDbConnection conn = new OleDbConnection(strAccessConnTaxCert);

            string query = "SELECT * FROM Orders WHERE Control_Number LIKE @_controlNumber;";


            OleDbCommand cmd = new OleDbCommand(query, conn);

            cmd.CommandText = query;
             OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn);
            adapter.SelectCommand.Parameters.Add("@_controlNumber", OleDbType.VarChar).Value = "%" + _controlNumber + "%";
                      System.Data.DataTable dt = new System.Data.DataTable();
            try
            {
                conn.Open();
                adapter.Fill(dt);
            }

            catch (System.Exception ex)
            {
                               throw;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            return dt.Rows[0][0].ToString();            
        }
4

1 回答 1

4

使用 % 作为通配符而不是 *。% 是事实上的通配符。oledb 驱动程序会将其转换为目标数据库期望的通配符。

编辑:我已经重读了这个问题。你不应该使用 % 但你应该使用 ? 反而。? 是您应该为一个字符使用的通配符。

这意味着您的查询应如下所示

select * from table where foo like '567???'

此外,请尝试在查询中使用参数而不是字符串连接。

于 2013-08-23T19:33:22.350 回答