2017-10-19 68 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和變量。希望有這樣的例子。 –