Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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# “int”类型函数(sql查询函数)的返回变量是什么_C#_Asp.net - Fatal编程技术网

C# “int”类型函数(sql查询函数)的返回变量是什么

C# “int”类型函数(sql查询函数)的返回变量是什么,c#,asp.net,C#,Asp.net,下面我声明一个witch类型的函数是'int'。我为sql查询声明此函数,该查询将int作为输出。在这里,我必须归还一些东西。但我无法理解在这个int类型函数中返回什么 public int Login(LoginClass loginClassObj) { string connectionString = @"Data Source=localhost;Initial Catalog=LoginTest;Integrated Security=True";

下面我声明一个witch类型的函数是'int'。我为sql查询声明此函数,该查询将int作为输出。在这里,我必须归还一些东西。但我无法理解在这个int类型函数中返回什么

    public int Login(LoginClass loginClassObj)
    {
        string connectionString = @"Data Source=localhost;Initial Catalog=LoginTest;Integrated Security=True";
        SqlConnection connection = new SqlConnection(connectionString);
        connection.Open();

        string query = @"SELECT COUNT(log_in) FROM login_table WHERE username = '"+loginClassObj.Username+"' AND password = '"+loginClassObj.Password+"'";
        SqlCommand command = new SqlCommand(query,connection);
        command.ExecuteNonQuery();
        return ???;  
    }

嗯,你有一个疑问。。。但出于某种原因,您正在调用ExecuteOnQuery。您应该指定ExecuteScalar以获取单个值。然后可以将结果强制转换为int:

我假设关键是返回匹配用户的数量,尽管这有点奇怪

此外:

您应该对连接和命令使用using语句,以便对它们进行适当的处理 永远不要像这样在SQL中嵌入值-而是使用参数化SQL,以避免SQL注入攻击和其他问题。有关示例,请参阅文档。 如果您真的直接在数据库中获得了密码,那么这是一个重要的问题。希望它实际上是某种描述的摘要 不清楚为什么要声明返回int的方法。也许你应该把它声明为返回布尔?方法声明给你了吗?您应该始终了解参数和返回类型的含义,否则您可能无法正确实现该方法。
嗯,你有一个疑问。。。但出于某种原因,您正在调用ExecuteOnQuery。您应该指定ExecuteScalar以获取单个值。然后可以将结果强制转换为int:

我假设关键是返回匹配用户的数量,尽管这有点奇怪

此外:

您应该对连接和命令使用using语句,以便对它们进行适当的处理 永远不要像这样在SQL中嵌入值-而是使用参数化SQL,以避免SQL注入攻击和其他问题。有关示例,请参阅文档。 如果您真的直接在数据库中获得了密码,那么这是一个重要的问题。希望它实际上是某种描述的摘要 不清楚为什么要声明返回int的方法。也许你应该把它声明为返回布尔?方法声明给你了吗?您应该始终了解参数和返回类型的含义,否则您可能无法正确实现该方法。
这样做应该可以解决大多数问题:

public bool Login(LoginClass loginClassObj)
{
    string connectionString = ...
    using(SqlConnection connection = new SqlConnection(connectionString))
    using(SqlCommand command = connection.CreateCommand())
    {
        connection.Open();
        command.CommandText = @"SELECT COUNT(log_in) FROM login_table
                                WHERE username = @username AND hash = @hash";
        command.Parameters.AddWithValue("username", loginClassObj.Username);
        command.Parameters.AddWithValue("hash", loginClassObj.GetSecureHash());
        int count = Convert.ToInt32(command.ExecuteScalar());
        return count == 1;
    }
}

但是,在许多情况下,您可能需要仅对用户名进行初始查询以查找salt—可能需要同时检索哈希,然后使用salt执行安全哈希,并将本地计算的哈希与存储的哈希进行比较。

类似的操作应该可以解决大多数问题:

public bool Login(LoginClass loginClassObj)
{
    string connectionString = ...
    using(SqlConnection connection = new SqlConnection(connectionString))
    using(SqlCommand command = connection.CreateCommand())
    {
        connection.Open();
        command.CommandText = @"SELECT COUNT(log_in) FROM login_table
                                WHERE username = @username AND hash = @hash";
        command.Parameters.AddWithValue("username", loginClassObj.Username);
        command.Parameters.AddWithValue("hash", loginClassObj.GetSecureHash());
        int count = Convert.ToInt32(command.ExecuteScalar());
        return count == 1;
    }
}

但是,在许多情况下,您可能需要仅对用户名进行初始查询以查找salt—可能需要同时检索哈希,然后使用salt执行安全哈希,并将本地计算的哈希与存储的哈希进行比较。

是否需要返回任何内容?您希望函数在完成时告诉您什么?如果它确实是您的函数,您最好知道返回什么。签名是你设计的!这取决于你想要达到的目标。您可以返回return命令。ExecuteNonQuery;如果需要受影响的行计数。您可以返回42;。或者,请澄清您的问题以获得答案。您需要返回任何内容吗?您希望函数在完成时告诉您什么?如果它确实是您的函数,您最好知道返回什么。签名是你设计的!这取决于你想要达到的目标。您可以返回return命令。ExecuteNonQuery;如果需要受影响的行计数。您可以返回42;。或者,请澄清您的问题以获得答案。作为旁注;可能的long-then-int还取决于所使用的特定RDBMS。@MarcGravell:谢谢。有没有关于SQL Server的想法,因为这里大概就是这么用的?我认为最好保持这个简单…count在SQL Server上返回int;长时间使用mysql和oracle,IIRCINT用于SQL Server:;另外两个我主要是通过整洁的虫子认识的;p很多兄弟@Jon skeeta是旁注;可能的long-then-int还取决于所使用的特定RDBMS。@MarcGravell:谢谢。有没有关于SQL Server的想法,因为这里大概就是这么用的?我认为最好保持这个简单…count在SQL Server上返回int;长时间使用mysql和oracle,IIRCINT用于SQL Server:;另外两个我主要是通过整洁的虫子认识的;P非常感谢兄弟@Jon SkeetThanks:@Marc Graveltanks:@Marc Gravell