首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecuteNonQuery返回0?

ExecuteNonQuery返回0?
EN

Stack Overflow用户
提问于 2018-12-16 01:52:58
回答 1查看 211关注 0票数 0

下面的代码将哈希值和用户名与本地数据库中相应的哈希值和用户名进行比较(App_Users3)

代码语言:javascript
复制
//-
SqlConnection con = new SqlConnection();
con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
con.Open();                

var cmd = new SqlCommand(@"SELECT Username, Hash FROM App_Users3 WHERE Hash = @Hash AND Username = @Username");
cmd.Connection = con;

// savedPasswordHash = cmd.ExecuteScalar() as string;
cmd.Parameters.Add("@Hash", SqlDbType.NVarChar, 50).Value = savedPasswordHash;
cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 400).Value = AppUsername;

if (cmd.ExecuteNonQuery() > 0) 
{
    MessageBox.Show(" Query successful.. something matched..  ");
    // change page.. load a profile? 
}

它不会抛出任何错误,但我不明白为什么消息盒没有出现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-16 07:08:00

ExecuteNonQuery返回受修改数据语句(insert、update、delete)影响的行。对于此类select语句,您应该使用ExecuteScalar,例如,返回用户的ID值。如果希望返回多个值(多行或多列),则应使用ExecuteReader

下面是修改后的代码,以返回匹配用户的UserID。

代码语言:javascript
复制
//-
    SqlConnection con = new SqlConnection();
    con.ConnectionString = ("Data Source=DESKTOP-PGHMM6M;Initial Catalog=LocalUsers;Integrated Security=True");
    con.Open();                

    var cmd = new SqlCommand(@"SELECT UserId FROM App_Users3 WHERE Hash = @Hash AND Username = @Username");
    cmd.Connection = con;
    //savedPasswordHash = cmd.ExecuteScalar() as string;
    cmd.Parameters.Add("@Hash", SqlDbType.NVarChar, 50).Value= savedPasswordHash;
    cmd.Parameters.Add("@Username", SqlDbType.NVarChar, 400).Value = AppUsername;


    if (cmd.ExecuteScalar() != null) {
        MessageBox.Show(" Query successful..something matched..  ");
        //change page.. load a profile? 
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53798808

复制
相关文章

相似问题

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