整合MS Identity合并数据库后,如何解决VB BC30561歧义错误?
问题背景
在将MS Identity整合至网站项目的过程中,原本运行正常,因项目存在两个.mdf数据库文件,遂改为使用单个SQL数据库。修改后,加载账户资料的方法出现以下异常:
- 初始报错:
Conversion from string "UserNameHere" to type 'Double' is not valid(SQL对应字段类型为char(30),并非Double类型) - 添加显式类型转换后,出现BC30561错误:
'Strings' is ambiguous,提示Strings类型同时导入自Microsoft.VisualBasic、System.Linq等命名空间
原代码:
Strings.Trim(_sxAdapter.GetValue(_sxAdapter.GetOrdinal("dbUsername")))
添加显式转换后的代码仍报相同错误:
Strings.Trim(CStr(_sxAdapter.GetValue(_sxAdapter.GetOrdinal("dbUsername"))))
已执行的操作:在类模块中添加Option Explicit和Option Strict并修正相关错误,对变量进行部分限定,但问题未得到解决。
解决方案与疑问解答
疑问解答
是否需用
global.对所有变量进行全限定?
不需要全局全限定,只需要对冲突的类型(比如这里的Strings)使用完全限定名即可,避免无差别全限定导致代码冗余。是否需调整Import语句?
可以调整:如果项目中没有依赖System.Linq的核心功能,可直接移除Import System.Linq语句;若必须保留该命名空间,则通过完全限定名调用目标方法,或改用无冲突的替代方案。其他解决方案?
- 消除
Strings歧义:
明确指定Microsoft.VisualBasic.Strings.Trim(...),直接调用VB原生的字符串工具类方法,避免和System.Linq中的同名类型冲突。 - 替换强类型读取方式:
避免使用返回Object类型的GetValue方法,改用强类型读取方法,直接获取字符串并修剪:
这种方式在_sxAdapter.GetString(_sxAdapter.GetOrdinal("dbUsername")).Trim()Option Strict On下更安全,也能避免类型转换的隐式错误。 - 绕开
Strings类:
直接调用字符串实例的Trim()方法,替代Strings.Trim(),比如:CStr(_sxAdapter.GetValue(_sxAdapter.GetOrdinal("dbUsername"))).Trim()
内容的提问来源于stack exchange,提问作者Zeddy
相关产品推荐
相关产品推荐

