2017-05-18 44 views
1
Connection c = new Connection(); 
public string checkIfExists(string Name) 
    { 
     string sql = "SELECT * FROM users WHERE name = '" + name + "'"; 
     c.Execute(sql); 

     return ""; 
    } 

c.Execute(sql)正在调用SqlCommand函数来执行sql查询。C#计数sql结果中的行数

我想知道如何计算这个查询检索的行数。

忽略返回。

+5

您有SQL注入易变性。 – SLaks

+0

可能重复的[从SQL查询捕获计数](https://stackoverflow.com/questions/4668911/capturing-count-from-an-sql-query) – Burgi

回答

7
  1. 确保您的SQL被parameterizing免受SQL注入攻击是
  2. 重写SQL返回COUNT
  3. 使用ExecuteScalar检索答案

查询应该是这样的:

var sql = "SELECT COUNT(*) FROM users WHERE name = @Name"; 
+0

因为他的方法的名称是checkIfExists,它可能会只需抓住索引键并调用'.HasRows'即可。它会快一点,明确他想要的东西(假设他说他想要的东西实际上并不匹配他的方法名称,因为它不会返回一个bool)。 – Dispersia

+1

@Dispersia这当然是真的。但是,我希望OP专注于基础知识,以便他能够消除严重的漏洞并首先获得对他的查询的答案,并在以后担心性能问题。很有可能的是,他会发现这个解决方案的性能可以接受,并且不用担心会进一步优化它。 – dasblinkenlight

+1

这是真的,因为他的方法命名和返回类型甚至没有真正匹配,所以只是为OP考虑更多的东西:) – Dispersia

3

这是Sam SQL查询:

SELECT COUNT(1) FROM nazvaniyami 
SQL query with condition: 

SELECT COUNT(1) FROM nazvaniyami WHERE condition 
Implementation in PHP: 

$a = mysql_query("SELECT COUNT(1) FROM navaneetham"); 
$b = mysql_fetch_array($a); 
echo $b[0]; // prints the number of rows 

同样,可以添加条件。然后代码打印满足条件的表中的行数。 感谢您的关注,与您的Maxim