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

如何修复“No Mapping exists from object type anystore.bLL.loginBLL to known managed provider native type”报错

报错根本原因

你在给SQL参数赋值时,直接将loginBLL类的完整实例对象l作为参数值传入了AddWithValue方法,.NET的SQL数据提供程序没有内置的规则可以将自定义的anystore.bLL.loginBLL类对象转换为数据库能识别的原生数据类型,因此触发映射错误。

修复方案

核心修改

替换参数赋值代码,传入loginBLL实例对应的属性值即可,需注意属性名要和你实际在loginBLL类中定义的字段名保持一致:

// 原错误代码
// cmd.Parameters.AddWithValue("@username", l);
// cmd.Parameters.AddWithValue("@password", l);
// cmd.Parameters.AddWithValue("@user_type", l);

// 修复后代码,属性名请根据你自己的loginBLL定义调整
cmd.Parameters.AddWithValue("@username", l.username);
cmd.Parameters.AddWithValue("@password", l.password);
cmd.Parameters.AddWithValue("@user_type", l.user_type);

可选优化建议

  • 避免使用AddWithValue的隐性类型推断问题,改为显式指定参数类型和长度,减少数据库类型不匹配风险:
// 字段长度和类型请和你的tbl_users表结构保持一致
cmd.Parameters.Add("@username", SqlDbType.NVarChar, 30).Value = l.username;
cmd.Parameters.Add("@password", SqlDbType.NVarChar, 100).Value = l.password;
cmd.Parameters.Add("@user_type", SqlDbType.TinyInt).Value = l.user_type;
  • 优化查询性能:登录验证不需要返回全量用户数据,将SQL语句改为SELECT COUNT(1) FROM tbl_users WHERE username=@username AND password=@password AND user_type=@user_type,直接调用cmd.ExecuteScalar()获取统计值判断是否大于0即可,无需创建SqlDataAdapter和DataTable,资源消耗更低。
  • 安全优化:禁止明文存储用户密码,生产环境需使用加盐哈希算法处理密码后再存入数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:45:02