【问题标题】:how to get the value of certain selected value out from Stored Procedure如何从存储过程中获取某些选定值的值
【发布时间】:2013-09-05 16:57:18
【问题描述】:

我刚开始使用 ASP.Net,我只知道 PHP,所以这意味着我有点固执。我需要真实的例子。

这是我的问题,我在一个名为Class1 的类库中找到了这个类,它连接到数据库并要求验证用户登录。

public string userlogin(string loginuser,string loginpass)
    {
        string type = null;
        myCon.Open();
        SqlCommand logincheck = new SqlCommand("CheckID", myCon);
        logincheck.CommandType = CommandType.StoredProcedure;
        logincheck.Parameters.Add("@userid", SqlDbType.NVarChar).Value = loginuser;
        logincheck.Parameters.Add("@password", SqlDbType.NVarChar).Value = loginpass;
        SqlDataReader dr;
        dr = logincheck.ExecuteReader();
        while (dr.Read())
        {
            type = //here i want to get the value of type in my database
            break;

        }
        myCon.Close();
        return type;
    }

这是我的存储过程

ALTER PROCEDURE dbo.logincheck
@userid nchar(10),
@password nchar(20)
AS
Select * from users Where userid = @userid and password = @password
RETURN

我需要一组例子。

【问题讨论】:

    标签: c# asp.net sql-server stored-procedures


    【解决方案1】:

    在不知道用户表的结构的情况下,以下是猜测:

    while (dr.Read()) {
    ...  
    }
    

    应该改为:

    if (dr.Read()) {
      type = dr["type"].ToString();
    }
    

    一些建议。

    1. 在您的连接和命令对象周围使用using 子句。这将在以后为您节省很多痛苦。有关示例,请参见:Calling stored procedure with return value。和SqlConnection SqlCommand SqlDataReader IDisposable 原因。 提示:如果您现在拥有的代码已发布到生产环境中,您很可能会开始看到与数据库相关的随机异常开始在各个地方弹出。所以这很重要。

    2. SqlCommand 中的 proc 名称(“checkid”)与存储过程的实际名称(“logincheck”)不匹配。改变其中之一。您现在拥有的内容在执行时会导致 sql 错误。

    3. 考虑更改变量 type 的名称。 Type 是 System 命名空间中的一个类,读取方式有点混乱。也许 accountType、loginType、userType 或类似的东西。您当然可以将其保留为type;只有关注你的人才会质疑。

    4. 更改您的 select 语句以实际命名您想要返回的列。就目前而言,它很脆。见:What is the reason not to use select *?

    5. 我使用了if 语句而不是while,因为你真的只想要第一行。

    【讨论】:

      【解决方案2】:

      假设“UserType”是您要查找的列(无法判断,因为您使用的是 Select *)该行将是

      type = dr["UserType"] as string
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-01
        • 2017-07-01
        • 2021-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        相关资源
        最近更新 更多