首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# SqlDataReader = null?

C# SqlDataReader = null?
EN

Stack Overflow用户
提问于 2010-03-23 22:39:58
回答 3查看 465关注 0票数 3
代码语言:javascript
运行
复制
            String sqlCheckPass = 
"Select * from Login where Username like @Username and Password like @Password";
        SqlCommand SqlCom = new SqlCommand(sqlCheckPass, myConnection);
        SqlCom.Parameters.Add(new SqlParameter("@Username", sUserName));
        SqlCom.Parameters.Add(new SqlParameter("@Password", sPassword));

        myConnection.Open();
        SqlDataReader myreader;
        myreader = SqlCom.ExecuteReader();
        int id = -1;

ErrorBox.InnerHtml = "Username:" + sUserName + ":" + sPassword + ":<br/>";
while (myreader.HasRows)
{
    id = (int)myreader["id"];
    String sUser = (String)myreader["Username"];
    String sPass = (String)myreader["Password"];
    ErrorBox.InnerHtml += "UserId is <b>" + id + "</b> " + sUser + ":" + sPass + ":<br >";
    Session["LoginID"] = id;
    Server.Transfer(ReturnPage);

}
if (id == -1)
{
    ErrorBox.InnerHtml = "Incorrect Password";
}
myConnection.Close();
catch (Exception err)
{
    ErrorBox.InnerHtml = "Error Getting  Option ID" + err.Message;
}

我在myreader =SqlCom.ExecuteReader()处添加了一个断点,它一直将myreader作为null和HasRows = False返回,但它确实有行。因此,它会一直验证我的登录是否不正确,因为id = -1,

帮助?

EN

回答 3

Stack Overflow用户

发布于 2010-03-23 22:44:27

您没有将您的阅读器连接到您的SQL连接/命令吗?

代码语言:javascript
运行
复制
SqlConnection myConnection = new SqlConnection(myConnectionString);
SqlCommand myCommand = new SqlCommand(mySelectQuery, myConnection);
myConnection.Open();
SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
while(myReader.Read()) 
{
   Console.WriteLine(myReader.GetString(0));
}
myReader.Close();
票数 4
EN

Stack Overflow用户

发布于 2010-03-23 23:02:13

问题可能类似于SqlParameters查询中的问题。试一试

代码语言:javascript
运行
复制
String sqlCheckPass =  
"Select * from Login where Username like '%' + @Username + '%' and Password like '%' + @Password + '%'"; 
票数 1
EN

Stack Overflow用户

发布于 2010-03-23 23:32:24

Bryan Denny上面的回答是正确的,但是,我将使用如下所示的语句将所有代码包含在其中:

代码语言:javascript
运行
复制
using (SqlConnection dataConnection = new SqlConnection(connectionString))
{
    using (SqlCommand SqlCom = dataConnection.CreateCommand())
    {
        SqlCom.CommandText = "Select * from Login where Username like @Username and Password like @Password";
        SqlCom.Parameters.Add(new SqlParameter("@Username", sUserName)); 
        SqlCom.Parameters.Add(new SqlParameter("@Password", sPassword)); 

        dataConnection.Open();
        SqlDataReader myreader; 
        myreader = SqlCom.ExecuteReader(); 
        dataConnection.Close();
    }
}

我没有把你所有的代码都添加到这个代码片段中,我想你已经明白了。

此外,您还可以尝试修改select语句以返回记录数,因为这是您需要的所有内容:

代码语言:javascript
运行
复制
SELECT COUNT(*) FROM Login WHERE Username like @Username AND Password like @Password

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2500747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档