试图检查我的数据库中是否存在某个用户

时间:2013-12-23 06:24:57

标签: c# sql-server linq visual-studio-2012 stored-procedures

我正在尝试检查我的数据库中是否存在某个用户,或者没有使用此存储过程:

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方法但没有用!

4 个答案:

答案 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)

就像错误信息所说:

  1. 您对see_if_writer_exsists_or_not的来电将返回ISingleResult个实例。
  2. ToString()的调用会返回"System.Data.Linq.ISingleResult"(当然不能转换为int)。
  3. 您必须从存储过程中返回查询结果,并重新生成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来电。