成员资格提供程序使用ToUpperInvarint()函数对userName进行大写,并且找不到用户具有特定于文化的字母,因此不能正常工作并抛出异常。
例如:在土耳其文化中,“admin”的大写字母是带有toUpper()方法的“ADMİN”,带有ToUpperInvariant()方法的是“ADMIN”。因为成员资格提供程序在其SQL查询中使用toUpperInvariant for userName和UPPER([userName]),所以无法找到一些用户。
我不知道如何修复它,请指导我?谢谢
if (membership.GetUser("admin", false) == null)
membership.CreateUserAndAccount("admin", "admin123");
此代码失败了两次,首先当用户“admin”存在时无法找到它,因为:它使用此查询在DB中搜索:
SELECT [userID] from [User] WHERE (UPPER([userName]) = @0);
第二,如果用户不存在(或找不到)尝试创建用户“admin”并且成功,但是当再次尝试为用户“admin”创建帐户时,它会尝试获取上面的“[userID]” sql查询,它找不到并抛出异常。因为“ADMIN!=ADMİN”
我的sql server(或我的数据库)排序规则是Turkish-CI