首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ExecuteNonQuery()总是返回-1

ExecuteNonQuery()总是返回-1
EN

Stack Overflow用户
提问于 2017-01-06 23:21:41
回答 2查看 2.9K关注 0票数 1

我正在使用C#和Server创建一个登录应用程序。

我的程序所做的:它看起来是否可以在数据库中找到给定的用户名和密码。

如果可以找到,ExecuteNonQuery()应该返回1(发现1行)。

如果组合不存在,ExecuteNonQuery()应该返回其他内容。

但在我的情况下,每当我使用一个好的或错误的组合,它总是返回-1.我该怎么解决这个问题?

我知道,有一些关于同一个问题的帖子,但还没有解决.

另外,ExecuteNonQuery()ExecuteScalar()的区别是什么?

这是正在发送的查询:

代码语言:javascript
代码运行次数:0
运行
复制
private void btn_loginvolgende_Click(object sender, EventArgs e)
{
    gebruiker.Gebruikersnaam = Convert.ToString(tb_gebruikersnaamlogin.Text);
    gebruiker.Wachtwoord = Convert.ToString(tb_wachtwoordlogin.Text);
    gebruiker.Achternaam = "a";
    gebruiker.Geslacht = "a";
    gebruiker.Geslacht = "a";
    gebruiker.Huidiggewicht = 1;
    gebruiker.Streefgewicht = 1;
    gebruiker.Leeftijd = 1;
    gebruiker.Naam = "a";

    db.QueryToDatabase("Select count (*) from Gebruiker where Wachtwoord = @Wachtwoord AND Gebruikersnaam = @Gebruikersnaam;", gebruiker);
    Thread.Sleep(500);

    if (db.Success == false)
    {
        MessageBox.Show("Login gegevens kloppen niet!");
    }
    else if (db.Success == true)
    {
        MessageBox.Show("U bent met succes ingelogd");
    }
}

这是我的课:

代码语言:javascript
代码运行次数:0
运行
复制
public void QueryToDatabase(string commandText, Gebruikerklasse gebruiker)
{
    // nieuwe connectie maken
    // ontvangt de query vanuit 'buttonclick' en voert hem hier uit
    // als ExecuteNonQuery niet kan worden uitgevoerd is er iets fout gegaan. D.m.v een bool moet hij dan een bericht tonen
    using (SqlConnection conn = new SqlConnection(connectionString))
    using (SqlCommand cmd = new SqlCommand(commandText, conn))
    {
        conn.Open();

        cmd.Parameters.AddWithValue("@Naam", gebruiker.Naam);
        cmd.Parameters.AddWithValue("@Achternaam", gebruiker.Achternaam);
        cmd.Parameters.AddWithValue("@Leeftijd", gebruiker.Leeftijd);
        cmd.Parameters.AddWithValue("@Geslacht", gebruiker.Geslacht);
        cmd.Parameters.AddWithValue("@Huidiggewicht", gebruiker.Huidiggewicht);
        cmd.Parameters.AddWithValue("@Streefgewicht", gebruiker.Streefgewicht);
        cmd.Parameters.AddWithValue("@Gebruikersnaam", gebruiker.Gebruikersnaam);
        cmd.Parameters.AddWithValue("@Wachtwoord", gebruiker.Wachtwoord);

        int a = cmd.ExecuteNonQuery();

        if (a == 1)
        {
            Success = true;
        }
        else if (a == -1)
        {
            Success = false;
        }

        conn.Close();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-06 23:31:28

似乎您需要一个方法来对数据库执行所有可能的任务。这几乎是不可能的。更好的方法是在类中有特定的方法与数据库进行交互。

例如,您可以更改您的Gebruikerklasse并添加一个名为Exists的方法,在该方法中,您可以微调特定任务的交互。当您只需要两个参数时,不需要创建很多参数。使用性能更好的ExecuteScalar (和正确的)调用从存储中获取信息,等等.

代码语言:javascript
代码运行次数:0
运行
复制
public class Gebruikerklasse 
{
    ....
    public bool Exists()
    {
        string commandText = @"Select count (*) from Gebruiker 
                              where Wachtwoord = @Wachtwoord AND 
                             Gebruikersnaam = @Gebruikersnaam;", 
        using (SqlConnection conn = new SqlConnection(DBClass.GetConnectionString()))
        using (SqlCommand cmd = new SqlCommand(commandText, conn))
        {
            conn.Open();
            cmd.Parameters.AddWithValue("@Gebruikersnaam", gebruiker.Gebruikersnaam);
            cmd.Parameters.AddWithValue("@Wachtwoord", gebruiker.Wachtwoord);
            int a = Convert.ToInt32(cmd.ExecuteScalar());
            return (a > 0);
        }
    }
}

这应该只是创建面向对象的任务方法的第一步。接下来是学习如何将模型与数据库代码分离。

附带注意:强迫对表进行计数,仅仅是为了发现条目是否存在是一种浪费。这里有一个特定的SQL语句,它非常有用。

搜索是否存在并阅读本文

存在与计数战斗永不结束

票数 1
EN

Stack Overflow用户

发布于 2017-02-08 23:36:17

我知道这个问题已经回答了。不过,我想补充一些补充资料:

ExecuteNonQuery -运行一个查询并返回受影响的行。

ExecuteScalar -运行一个查询并返回第一行第一列的值。

ExecuteReader -运行一个查询并返回一个SqlDataReader;该SqlDataReader可用于读取所请求的数据库记录。

我最近也写了一篇关于这方面的教程,包括“内存管理”。请参阅:http://jeroenstevens.blogspot.ca/2017/02/how-to-connect-netc-to-sql-database.html

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

https://stackoverflow.com/questions/41515955

复制
相关文章

相似问题

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