2015-07-10 35 views
0

我有一個文本框的金額,我想要下面的語句來顯示它。如何在文本框中顯示總金額?

下面是我的代碼:

<!--Amount--> 
    <div class="form-group"> 
     <label class="control-label col-lg-4"> 
      Amount</label> 
     <div class="col-lg-8"> 
      <asp:TextBox ID="txtBudget" runat="server" class="form-control" AutoPostBack="True" /> 
     </div> 
    </div> 

代碼背後:

void GetTotalAmount() 
{ 
    con.Open(); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandText = "SELECT SUM(Materials.SellingPrice + Equipments.Price + Resource_Vehicles.Cost + Contractors.Rate) " + 
    "FROM ProjectTasks INNER JOIN Resource_Contractors ON ProjectTasks.TaskID = Resource_Contractors.TaskID INNER JOIN " + 
    "Resource_Equipments ON ProjectTasks.TaskID = Resource_Equipments.TaskID INNER JOIN Resource_Materials ON ProjectTasks.TaskID = Resource_Materials.TaskID INNER JOIN " + 
    "Resource_Vehicles ON ProjectTasks.TaskID = Resource_Vehicles.TaskID INNER JOIN Contractors ON Resource_Contractors.ContractorID = Contractors.ContractorID INNER JOIN " + 
    "Materials ON Resource_Materials.MaterialID = Materials.MaterialID INNER JOIN Equipments ON Resource_Equipments.EquipmentID = Equipments.EquipmentID INNER JOIN " + 
    "Vehicles ON Resource_Vehicles.VehicleID = Vehicles.VehicleID WHERE [email protected]"; 
    SqlDataReader dr = cmd.ExecuteReader(); 
    con.Close(); 
    } 

謝謝!

+0

你可以add-txtBudget.Text = Convert.ToString(dr); SqlDataReader之後的行dr = cmd.ExecuteReader(); – ShaileshDev

+0

我刪除了我的答案,贊成以下兩條,但值得補充的是,您並未指定參數值。在執行命令之前,你需要像'cmd.Parameters.AddWithValue(「@ TaskID」,taskid);'Where'任務'=你想要的'id'。有些人會認爲你不應該使用'AddWithValue',但是對於某些數據類型,它確實不是問題。 – Fred

回答

3

如果您的查詢是okey,只需使用ExecuteScalar即可獲取該值並指定您的文本框的Text屬性。你不需要使用ExecuteReader

var sum = cmd.ExecuteScalar(); 
txtBudget.Text = sum.ToString(); 

還使用using statement來配置您的連接和命令;

void GetTotalAmount() 
{ 
    using(var con = new SqlConnection(conString)) 
    using(var cmd = con.CreateCommand()) 
    { 
     cmd.CommandText = "..."; 
     con.Open(); 
     var sum = cmd.ExecuteScalar(); 
     txtBudget.Text = sum.ToString(); 
    } 
} 
+0

使用'var sum = cmd.ExecuteScalar();'因爲它可能有雙倍或十進制 –

+0

@Sindersindersh是的,可以。改變了那部分。 –

+0

txtBudget.Text = i.ToString(); 我代表什麼? –

2

你只需要使用SqlDataReader.GetDouble

using (var dr = cmd.ExecuteReader()) // use using for everything implementing IDisposable, also connection 
{ 
    if (dr.HasRows) 
    { 
     dr.Read(); // advances reader to first record 
     txtBudget.Text = dr.GetDouble(0).ToString(); 
    } 
} 

另一種方法是使用ExecuteScalar如果你只選擇單個值(如圖Soner)。