问题描写叙述:

近期在做项目的过程中,遇到一个问题,将从基础系统查询出来的课程ID作为參数去考评系统里查询考试信息,却什么也查不出来,调试了半天不知道什么原因。


问题分析:
静下心来思考一下,能够肯定程序代码逻辑以及实现是没有问题的,因此就是数据的问题了。那么数据出问题就应该是数据库的问题了,在进行单步调试的过程中。去检查各个变量以及參数的值,最终找到了问题出在哪里。先来看看两个系统的数据库存储CourseId的数据类型是什么吧,例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmppYW5nd2Vp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="362" height="143" alt="">

上图中左边是基础的。右边是考试的。再来看看我的代码是怎样实现问题描写叙述里所说的过程吧:


想着想着就意识到一个问题。GUID是什么鬼??
于是百度了 一下:全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。

GUID是一种由算法生成的二进制长度为128位的数字标识符。

GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下。不论什么计算机和计算机集群都不会生成两个同样的GUID。

GUID
的总数达到了2^128(3.4×10^38)个,所以随机生成两个同样GUID的可能性很小,但并不为0。

GUID一词有时也专指微软对UUID标准的实现。

人家是数字标识符好不好。区分什么大写和小写啊。唉,读书少啊!不信,我们能够使用代码进行验证:
            //验证GUID是否区分大写和小写
Guid g1 = new Guid("6d025d37-a957-44b1-9e25-50d6bfd57a39");
Guid g2 = new Guid("6D025D37-A957-44B1-9E25-50D6BFD57A39");
Console.WriteLine(g1.Equals(g2)); // 返回true
Console.WriteLine(Object.ReferenceEquals(g1, g2)); // 返回false //使用tostring函数将GUID转换为string类型。观察他们的值
string strg1 = g1.ToString();
string strg2 = g2.ToString();
Console .WriteLine (strg1.Equals (strg2 )); //返回true
Console.WriteLine(strg1);
Console.WriteLine(strg2);
//可是假设你的数据库存储类型为varchar,那就不一样了
string str1 = "6d025d37-a957-44b1-9e25-50d6bfd57a39";
string str2 = "6D025D37-A957-44B1-9E25-50D6BFD57A39";
Console.WriteLine(str1.Equals(str2)); //返回false
Console.Read();
而前面提到的uniqueidentifier,则是GUID在数据库里的存储类型。他们事实上是一个东西。如此一来,就明朗了很多。

问题解决:
办法有两个:一个是让两者的数据库的数据类型保持一致,这是根本上的解决之道。假设不想改动数据库的话,能够接着使用varchar的数据类型去存储GUID的字符串,可是要保证其必须是字母小写的格式。否则在依据其字段值进行查询的时候,字符串是无法和guid的ToString()方法产生的字符串进行匹配的。因此查询结果肯定不对。建议还是统一数据类型吧。

小结 一下:
事实上细致想想还是基础性的东西不扎实,我根本不知道GUID的概念,因此才会有标题所述的疑问。假设我清楚的知道GUID是一种由算法生成的二进制长度为128位的数字标识符,那么或许会非常快的找到问题出在哪里。

最新文章

  1. 使用C#模拟键盘输入、鼠标移动和点击、设置光标位置及控制应用程序的显示
  2. md5加密篇(一)
  3. 我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的独家报告!
  4. ubuntu12.04 登录黑屏
  5. Hbase之删除数据
  6. 从零开始学ios开发(十二):Table Views(中)UITableViewCell定制
  7. ThinkPHP 的CURD 基本操作
  8. c# 操作PPT
  9. sql小技巧 group by datetime类型字段,只取其中的日期部分
  10. sqlserver删除重复的数据
  11. win10 uwp clone
  12. SDN第二次上机作业
  13. 20175223 《Java程序设计》 第八周学习总结
  14. Itween的代码使用方法 - 01
  15. Apache Spark支持三种分布式部署方式 standalone、spark on mesos和 spark on YARN区别
  16. Android NDK MediaCodec在ijkplayer中的实践
  17. 正则匹配-URL-域名
  18. [原][osg][QT]osg与QT界面结合的简单例子二
  19. spring boot 整合pagehelper分页插件
  20. Java 8 – How to format LocalDateTime

热门文章

  1. 【Luogu】P1393动态逆序对(树套树)
  2. 路飞学城详细步骤 part1
  3. 【Tyvj1982】武器分配(费用流)
  4. 【shell】shell编程(一)-入门
  5. android图片上传
  6. Working with multiple environments
  7. Jetson TK1 四:重新安装系统(刷机)
  8. iOS数据持久化存储
  9. 社会信息化环境下的IT新战略
  10. Android:BLE智能硬件开发详解