You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Anywhere 12 ODBC带过滤查询返回零行,.NET C#程序异常求助

解决.NET C# ODBC连接SQL Anywhere 12查询返回空的问题

我之前也碰到过类似的SQL Anywhere ODBC查询坑,你遇到的这种「代码里查不到但工具里能查到」的情况,大概率是驱动处理逻辑或者查询写法的问题,咱们一个个排查:

  • 优先用参数化查询替代硬编码值
    直接把字符串值嵌到SQL语句里,ODBC驱动可能会对引号或者字符串编码做特殊处理,导致匹配不到数据。换成参数化写法试试,这不仅能解决当前问题,还能避免SQL注入:

    using (var connection = new OdbcConnection(conStrMonitor))
    {
        connection.Open();
        var cmd = new OdbcCommand("Select art_artnr, art_ben from monitor.ARTIKEL WHERE art_artnr = ?", connection);
        // 添加参数,指定类型和值
        cmd.Parameters.Add("@artnr", OdbcType.VarChar).Value = "VSV203798";
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 读取数据逻辑
                Console.WriteLine($"{reader["art_artnr"]} - {reader["art_ben"]}");
            }
        }
    }
    
  • 检查大小写敏感性
    SQL Anywhere的排序规则可能区分大小写,而Sybase Center默认可能做了不区分大小写的匹配。你可以试试把查询改成大小写无关的形式验证:

    Select art_artnr, art_ben from monitor.ARTIKEL WHERE UPPER(art_artnr) = UPPER('VSV203798')
    

    如果这样能查到数据,说明是大小写匹配的问题,要么调整查询写法,要么检查数据库的排序规则设置。

  • 确认数据库上下文和权限一致
    虽然你指定了monitor.ARTIKEL,但要确保代码里的连接字符串对应的数据库、用户权限和你在Sybase Center里用的完全一致。比如可以先在代码里执行不带过滤的SELECT TOP 10 * FROM monitor.ARTIKEL,看看能不能读到数据,确认连接的是正确的数据库实例。

  • 验证ODBC驱动版本
    老版本的SQL Anywhere ODBC驱动可能存在查询解析的bug,建议你检查当前使用的驱动版本是否和SQL Anywhere 12兼容,最好下载官方对应版本的驱动重新安装测试。

内容的提问来源于stack exchange,提问作者Mattias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:38:36