我正在尝试检查我的数据库中是否存在某个用户,或者没有使用此存储过程:
ALTER PROCEDURE see_if_writer_exsists_or_not
@username nvarchar(50),
@password nvarchar(50)
AS
select count(*)
from writers
where username = @username and password = @password
RETURN
然后我将其作为使用Linq-to-SQL的方法调用此代码:
int b = DS.see_if_writer_exsists_or_not(username.Text, password.Text);
if (b > 0)
{ // the rest of the code...
但出现转换错误
无法将type'System.Data.Linq.ISingleResult'隐式转换为'int'
如何解决这个问题?
注意:我尝试了Convert.ToInt32
方法但没有用!
答案 0 :(得分:1)
存储过程没有问题!如果你想检查这个用户名和密码是否存在 只需使用.count()
检查您的方法是否返回值if (DS.see_if_writer_exsists_or_not(username.Text, password.Text).count() > 0)
{
// yourcode...
}
答案 1 :(得分:1)
我找到了一个解决方案,也可以使用.ElementAt(0)
方法从数据库中提取检索到的记录,这是我代码中的更新:
DS.see_if_writer_exsists_or_not(username.Text, password.Text).ElementAt(0)
通过使用这个我可以得到第一个元素检索,这就是我想要的
答案 2 :(得分:0)
就像错误信息所说:
see_if_writer_exsists_or_not
的来电将返回ISingleResult
个实例。ToString()
的调用会返回"System.Data.Linq.ISingleResult"
(当然不能转换为int)。您必须从存储过程中返回查询结果,并重新生成see_if_writer_exsists_or_not
方法以完成您想要的操作。
答案 3 :(得分:0)
ISingleResult
是一个可枚举的。您可以使用foreach
循环播放它。你也可以这样做:
ISingleResult<int> results = YourMethodCall();
int returnValue;
if(results.Count()>0){
returnValue = results.First<int>();
}
另外,请从方法调用中删除ToString
来电。