Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';无法从SqlDataReader读取数据_C#_Sqldatareader_Datareader - Fatal编程技术网

C# Can';无法从SqlDataReader读取数据

C# Can';无法从SqlDataReader读取数据,c#,sqldatareader,datareader,C#,Sqldatareader,Datareader,我正在尝试使用c#中的DataReader从数据库中读取数据。我遇到一个eror说没有数据存在。这是我的密码: [WebMethod] //Login invoke public string[] login(string u, string p) { SqlConnection con = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cmd.Connectio

我正在尝试使用c#中的DataReader从数据库中读取数据。我遇到一个eror说没有数据存在。这是我的密码:

[WebMethod] //Login invoke 
    public string[] login(string u, string p) 
    {
        SqlConnection con = new SqlConnection();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.ConnectionString = @"******Database.mdf";
        cmd.Parameters.AddWithValue("@u", u);
        cmd.Parameters.AddWithValue("@p", p);
        cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username='@u' AND pass='@p' ";

        int st = 555;
        string lastonline = "";

        try
        {
            con.Open();
            SqlDataReader r = cmd.ExecuteReader();
            if (r.Read())
            {
                st = r.GetInt16(2);
                lastonline = r.GetString(3);
            }

            else
            {
                string[] x = new string[1] { "err" };
                return x;
            }

            r.Close();
            con.Close();
        }
        catch { }
        string[] arr = new string[3] { st.ToString(), lastonline, u };
        return arr;
不可能有两行具有相同的用户名和密码,因此我没有在
r.Read()中使用
while
循环。 所有这些函数都获取用户名和密码,检查数据库中是否有可兼容的行,获取该行中的其余列,并以字符串数组形式返回它们。如果没有任何内容(没有这样的用户),它将返回一个值为“x”的数组。问题是我总是得到“x”,当我强迫它阅读时,它会弹出我上面提到的eror

注: *我试着单独运行这个查询,效果很好。 *我检查了“u”和“p”值是否响应“username”和“pass”。他们这样做没有问题。 *在stackoverflow中在线查看,仍然没有任何内容符合我的问题


有解决方案吗?

这是因为您将用户名和密码与字符串
'@u'
'@p'
进行比较,而不是与参数值
@u
@p
进行比较

删除参数周围的撇号:

cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username=@u AND pass=@p ";

这是因为您将用户名和密码与字符串
'@u'
'@p'
进行比较,而不是与参数值
@u
@p
进行比较

删除参数周围的撇号:

cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username=@u AND pass=@p ";

在参数化查询中,您不需要在参数名称上加引号:

  cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username=@u AND pass=@p";

您的版本试图实际匹配用户名
@u
和密码
@p

在参数化查询中,您不需要参数名称上的引号:

  cmd.CommandText = "SELECT username, pass, st, lastonline FROM admins WHERE username=@u AND pass=@p";
您的版本试图实际匹配用户名
@u
和密码
@p