2017-10-19 57 views
0

我在C#中有下面的代码,我想变成一个MySQL代码片段吗?把c#代码转成mysql函数

foreach (DataRow row in dtBills.Rows) 
      { 
       classes.UtilityBill ub = new classes.UtilityBill(row); 

       if (ub.ApprovedBy > 0) 
       { 
        if (ub.RemainingBalance() > 0) { totalOutstanding += ub.RemainingBalance(); numberOfUnpaidBills++; } 
        if (ub.RemainingBalance() > 0 && ub.IsOverDue()) { numberOfOverdueBills++; } 
       } 
       else 
       { 
        if (ub.ApprovedBy == 0) 
        { 
         awaitingApproval++; 
        } 
        else 
        { 
         rejectedBills++; 
        } 
       } 
      } 

ub.RemainingBlaance()表中,然后减去基本检查两个字段,AMOUNT_DUE - amount_paid

我正在寻找已经恢复为单行,看起来像:

totalOutstanding, numberOfUnpaidBills, numberOfOverdueBills, awaitingApproval, rejectedBills 

原始表:

enter image description here 我知道这可能会遇到像一个懒惰的问题,但我哈从来没有处理过编码在MySQL中,只是简单的查询,我不知道如何开始。正确的方向推进就足够了,而不是一个完整的解决方案。

谢谢!

+1

您似乎没有在上面的代码中的任何数据库连接...什么是您的表是什么样子?你的列名是什么? –

+0

我的不好,添加了表格的图像:) –

+0

你看过实体关系吗?这是为了这样的事情 –

回答

0

要查询mysql,您可以使用mysql.data nuget包。你可以查看他们的文档。我创建了一个nuget以简化从任何C#框架到mysql的代码。如果你不介意第三方的nugets,你可以尝试一下。它被称为mysql.simple。从我从什么代码试图做的了解,这里是拉动数据的小码:

using (Database db = ConnectionString) // initializes connection 
{ 
    // you can omit the below select function if you would like to select all 
    using (var Row = db.Select("unit_cost, start_reading") 
         From("tblName").Query() 
    while(Row.Read()){ // gets each row 
     ub.unit_cost = Row["unit_cost"]; 
     ub.start_reading= Row["start_reading"]; 
     . 
     . 
     . 
    } 
} 

以上db对象有选择,更新和插入功能,所有的变化包括选择插入语句。但是,如果你想使用原始的sql查询,你可以直接使用db.Query(“sql query here”)。你可以看到更多的单证这里http://mysqlsimple.azurewebsites.net/docs

下面是一个简单的MySQL存储过程,我与我:

DELIMITER // 
DROP PROCEDURE IF EXISTS proc_IF; 
CREATE PROCEDURE proc_IF (IN param1 INT) 
BEGIN 
    DECLARE variable1 INT; 
    SET variable1 = param1 + 1; 

    IF variable1 = 0 THEN 
    SELECT variable1; 
    END IF; 

    IF param1 = 0 THEN 
    SELECT 'Parameter value = 0' ; 
    ELSE 
    SELECT 'Parameter value <> 0' ; 
    END IF; 

END // 

此示例包含参数,变量和if语句的例子。

您可以在C#这样的事情称之为:

db.QueryValue("CALL proc_IF (@0)", myVal); 
+0

很酷的nuget!我看看那个。但是,我并不是真的在寻找什么。我想要的是将计算完成在数据库上,然后作为结果返回,而不是先查询数据库中的行,然后通过它们循环并在服务器端进行计算。 –

+0

在这种情况下,您可以尝试在mysql中创建存储过程并在c#中使用它们。这也可以帮助你防止sql注入。然而,mysql中的存储过程很棘手,至少与sql server相比。如果计算很简单,您可以使用一个sql来生成代码。例如'SELECT mount_due - amount_paid' –

+0

这是有点我在找。我习惯于创建SP,但不能使用IF,Case和变量。希望有这样的例子。 –