事情是这样的,刚刚我在测试我的工作内容的时候,我发现前台界面上不能返回我想要的值,但很奇怪的是在如果在数据库的存储过程中输入相同的参数能够查询到我想要的数据,为此我踏上了排查之路。
如图一前台xml文件中调用的存储过程中的@IN_MODULE_NAME这个变量是被定义为@IN_MODULE_NAME,于是我在判断入参的值是不是我想要的枚举值的时候,我用了'0001',但是并没有查询到我想要的结果。接着我经过了四个小时的不断调试,我比对关键的字段名是否正确,确定是否已经把数据传到页面之后发现这些都是正常的以后,我开始思考,是不是我的值有问题,由于我在后台输入的存储过程是并没有验证我的值是什么类型的,只是让输入参数即可,于是我开始思考,是不是有可能我的值应该输入0001(它是定义的一个枚举值,这里没有做转换为1,也没有转换为'0001'),而不是'0001',我再次尝试,然后结果喜人,我终于得到了我想要的值,但是我仍然不懂为什么要这么写,因为存储过程中(我用的数据库是sqlserver2008)已明确写了这个参数应该是字符串,我陷入了深深地思考。不知道这个是否与强类型和弱类型语言而导致的,但我的脑袋里突然蹦出的就只有它们。如果有缘人读到这篇文章,有自己的想法,欢迎留言。
下面简单说下强类型语言和弱类型语言(希望自己可以再多研究研究):
- 强类型语言,当你定义一个变量是某个类型,如果不经过代码显式转换(强制转化)过,它就永远都是这个类型,如果把它当做其他类型来用,就会报错。
- 弱类型语言,你想把这个变量当做什么类型来用,就当做什么类型来用,语言的解析器会自动(隐式)转换。