C#连接本地SQL Server插入正常但SELECT查询无结果如何解决
问题原因及修复方案
- 变量拼接错误(首要原因)
你的INSERT语句中取用户名使用的是usuario.nombre,但SELECT语句直接拼接了usuario对象本身。C#中直接拼接类对象会默认调用ToString()方法,输出类的全限定名而非你需要的用户名字段值,导致查询条件永远匹配不到数据,直接修改SELECT语句的拼接值为usuario.nombre即可验证。 - 数据库名大小写匹配问题
INSERT语句开头显式指定了USE [Taxi],而SELECT语句中写的是taxi.dbo.Usuario,如果你的SQL Server实例使用了大小写敏感的排序规则,taxi和Taxi会被识别为两个不同的数据库,导致查询找不到目标表。建议直接在数据库连接字符串中指定默认数据库,避免每次SQL语句中加前缀或USE声明。 - 异常被吞无法定位问题
你注释了catch块的异常捕获逻辑,运行时出现的语法错误、权限错误等具体报错都会被屏蔽,你只能拿到null返回值无法定位根因。暂时放开异常捕获,输出ex.Message即可直接看到具体错误信息。 - 额外优化建议
你目前的字符串拼接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
相关产品推荐
相关产品推荐

