困扰我几天了,System.Collections.Generic.KeyNotFoundException: 给定关键字不在字典中。

Asilan555 2015-03-12 12:35:01
WebService操作发布在服务器上的MySql的数据库,增删改都是正常的,唯独读取数据就不行,代码走到这里就报异常:

网上各种办法都试过了,都不行,下面是表结构:

请各位朋友帮忙看看,实在没办法了。。。
...全文
7939 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
singsong130 2017-10-29
  • 打赏
  • 举报
回复
被恶心了一天 终于脱坑 这报错也是醉了 改完字符集立马见效
qq_39893743 2017-09-14
  • 打赏
  • 举报
回复
检查数据库的字符集,很有可能就是字符集的不同导致的错误
huhu88a 2015-07-24
  • 打赏
  • 举报
回复
给定关键字不在字典中。 这种问题就是你改某个字段的数据类型,你把数据类型改回去就好了!
Asilan555 2015-03-12
  • 打赏
  • 举报
回复
终于解决了,我刚把caption的varchar字符集改了就可以了,回来看帖发现於黾我们俩想到一块去了,给你100分 哈哈。。
於黾 2015-03-12
  • 打赏
  • 举报
回复
关键不知道你SQL语句和参数里到底是否涉及到了汉字,真心猜不到
於黾 2015-03-12
  • 打赏
  • 举报
回复
如果是在不同的机器上访问数据库,本地访问好使,远程访问不好使 很可能是因为客户端和服务端使用的字符集不匹配
於黾 2015-03-12
  • 打赏
  • 举报
回复
引用 14 楼 gyyong 的回复:
Select count(*) 可以正确返回;各位朋友帮帮忙出出主意啊,到底哪个地方出问题了,头脑风暴下 哈哈
放出SQL和参数内容 另外你所说的在"服务端加了如下代码",也不清楚你这个服务端到底在哪里,跟数据库在同一台服务器上吗
本拉灯 2015-03-12
  • 打赏
  • 举报
回复
楼主看看这 MySQL Connector/Net did not support the utf8mb4 character set. When attempting to connect to utf8mb4 tables or columns, an exception KeyNotFoundException was generated. (Bug #58244) 试着修改你的mysql的字符集试一试。 http://bbs.csdn.net/topics/390660725
Asilan555 2015-03-12
  • 打赏
  • 举报
回复
Select count(*) 可以正确返回;各位朋友帮帮忙出出主意啊,到底哪个地方出问题了,头脑风暴下 哈哈
Asilan555 2015-03-12
  • 打赏
  • 举报
回复
恩,确定,我刚才服务端加了如下代码:
    
                 DataTable dt = new DataTable();
                 dt.Columns.Add("id");
                 dt.Columns.Add("caption");
                 dt.Columns.Add("pid");
                 DataRow newRow = dt.NewRow();
                 newRow["id"] = 1;
                 newRow["caption"] = "222";
                 newRow["pid"] = 0;
                 dt.Rows.Add(newRow);
                 dataset.Tables.Add(dt);
这个可以正确返回,字段是跟表结构一样的,现在问题根源就是从数据库读数据这个环节出问题了
於黾 2015-03-12
  • 打赏
  • 举报
回复
你确定远程服务器里的数据结构跟你本地数据库里的完全一样没有任何区别?
Asilan555 2015-03-12
  • 打赏
  • 举报
回复
以上的方法都试过了,不行,为什么远程服务器的就不行,大家有没有碰到过类似的问题
本拉灯 2015-03-12
  • 打赏
  • 举报
回复
哥们,你改用DataReader试试 using (var reader = dbCmd.ExecReader(dbCmd.CommandText)) { var dt = new DataTable(); dt.Load(reader); return dt; } 这样反回DataTable
Asilan555 2015-03-12
  • 打赏
  • 举报
回复
调的存储过程是没有参数的,数据库里执行sql语句就可以取到数据
Asilan555 2015-03-12
  • 打赏
  • 举报
回复
谢谢,各位的回复,还有我调本地的Mysql数据库就可以,但是调远程服务器上就出现这样的问题,而且这2个数据库是一模一样的,包括里面的数据。
宝_爸 2015-03-12
  • 打赏
  • 举报
回复
宝_爸 2015-03-12
  • 打赏
  • 举报
回复
原来异常在主题了。是挺奇怪的。 有stacktrace吗?
宝_爸 2015-03-12
  • 打赏
  • 举报
回复
我怎么没看见异常信息?
  • 打赏
  • 举报
回复
第一次见到这样的异常……
exception92 2015-03-12
  • 打赏
  • 举报
回复
DataSet dataset = new DataSet();
dataset.Tables.Add("dt");
adapter.fill(dataset,"dt");
加载更多回复(2)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧