【问题标题】:Query return on C#/mysql在 C#/mysql 上查询返回
【发布时间】:2020-08-04 19:54:39
【问题描述】:

我在我的班级里有“fattura”这个

public string sommaFattura(String costo)
    {
MySqlCommand command = new MySqlCommand();
            String sumQuery = "SELECT SUM(`prezzo`) FROM `fatturetemp`";
            command.CommandText = sumQuery;
            command.Connection = conn.getConnection();
            command.Parameters.Add("@prezzo", MySqlDbType.Int32).Value = costo;
            conn.openConnection();
//Need the command for take the result
                conn.closeConnection();
}

求和查询结果的命令是什么? 我想使用这个命令,插入一个变量。你能纠正我吗?

【问题讨论】:

标签: c# mysql visual-studio-2010


【解决方案1】:

我认为你想要的命令是

command.ExecuteScalar();

但是,请注意,Execute Scalar 的目的是让结果返回单行单列,您的查询在不考虑参数的情况下执行该操作。但是,您的查询也没有特别的意义..

现在您的查询本身。您有一个显式的prezzo,这意味着现有的列名而不是参数的名称。出于显而易见的原因,它必须对一个数字字段进行求和。

现在您还可以通过函数调用的“costo”参数获得一个预期的字符串。如果您的意图是让传入的字符串代表表的已知列,那么这对您不起作用。您必须使用该明确的列名构建 SQL 命令,或者构建动态 sql,但这确实太多了。

使用字符串参数构建 SQL 语句的问题在于,您可能会接受 SQL 注入,尤其是基于 Web 的情况。如果您的传入字符串来自受控来源,例如您正在向用户呈现列列表,而他们只能选择一个这样的列。或者,您在屏幕上有按钮要求某事物的总和,并且您控制该列名,您会处于更好的状态,但仍要谨慎传递参数以构建 SQL。

例如,您的表有 qtySold 和 DollarSales 的数字字段。您想要这些列中任一列的总和,并将这些相应字符串中的一个传递给函数,例如

var qtySoldAnswer = sommaFattura( "qtySold" );
   or
var dollarSalesAnswer = sommaFattura( "dollarSales" );

那么你的函数将更接近...

public string sommaFattura(String costo)
{
   MySqlCommand command = new MySqlCommand();
   command.CommandText = "SELECT SUM(" + costo + ") FROM fatturetemp";
   command.Connection = conn.getConnection();
   conn.openConnection();
   var answer = command.ExecuteScalar();
   conn.closeConnection();

   // I would put a breakpoint in here to see the results.
   // you can then format the answer such as decimal point, etc.
   return answer.ToString();
}

再次,仅当您可以控制要发送的列名时。有人可能会进行 sql 注入并造成很大的破坏。我只会严格控制考虑并明确验证您将允许的列,如果是这样,请在此时设置您的变量。不允许多于或少于列名。没有特殊字符、引号、cmets、sql-terminator 和 new 语句...

但希望这能澄清我认为你正在努力实现的目标。

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2018-10-10
    • 1970-01-01
    • 2018-11-19
    • 2017-03-03
    • 2014-01-18
    相关资源
    最近更新 更多