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

C#连接本地SQL Server插入正常但SELECT查询无结果如何解决

问题原因及修复方案

  1. 变量拼接错误(首要原因)
    你的INSERT语句中取用户名使用的是usuario.nombre,但SELECT语句直接拼接了usuario对象本身。C#中直接拼接类对象会默认调用ToString()方法,输出类的全限定名而非你需要的用户名字段值,导致查询条件永远匹配不到数据,直接修改SELECT语句的拼接值为usuario.nombre即可验证。
  2. 数据库名大小写匹配问题
    INSERT语句开头显式指定了USE [Taxi],而SELECT语句中写的是taxi.dbo.Usuario,如果你的SQL Server实例使用了大小写敏感的排序规则,taxi和Taxi会被识别为两个不同的数据库,导致查询找不到目标表。建议直接在数据库连接字符串中指定默认数据库,避免每次SQL语句中加前缀或USE声明。
  3. 异常被吞无法定位问题
    你注释了catch块的异常捕获逻辑,运行时出现的语法错误、权限错误等具体报错都会被屏蔽,你只能拿到null返回值无法定位根因。暂时放开异常捕获,输出ex.Message即可直接看到具体错误信息。
  4. 额外优化建议
    你目前的字符串拼接SQL写法存在SQL注入风险,且如果用户名包含单引号会直接导致SQL语法错误,建议替换为参数化查询写法,示例如下:
// 参数化查询示例,避免注入和语法问题
public DataTable GetUsuarioId(string nombreUsuario)
{
    DataTable dt = new DataTable();
    // 连接字符串里已经指定默认数据库的话不需要写库名前缀
    string query = "SELECT idUsuario FROM dbo.Usuario WHERE nombre = @Nombre";
    try
    {
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            // 显式指定参数类型和长度更安全
            cmd.Parameters.Add("@Nombre", SqlDbType.VarChar, 50).Value = nombreUsuario;
            using (SqlDataAdapter da = new SqlDataAdapter(cmd))
            {
                da.Fill(dt);
            }
        }
        return dt;
    }
    catch (Exception ex)
    {
        // 这里可以记录异常日志
        Console.WriteLine(ex.Message);
        if (con.State == ConnectionState.Open)
        {
            con.Close();
        }
        return null;
    }
}

另外你ejecutaConsulta方法中声明的SqlDataAdapter完全没有用到,可以直接删除,不影响功能。

内容的提问来源于stack exchange,提问作者Diego Sanchez Lizuain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:05