2017-07-26 117 views
0

我是新來的C#我想知道如何從數據庫中檢索一個整數值並將其存儲在一個變量中。檢索int數據庫並將其存儲在一個變量中C#

之後,我需要使用此值來添加另一個已完成的整數並將其存回數據庫。

我已經搜索了很多方法,但大多數給出的方法將它存儲在數據網格視圖中,但我想在不顯示的情況下進行計算。

SqlDataAdapter sql1 = new SqlDataAdapter("Select finaldays from LeaveTest where Id = '" + comboBox1.SelectedText + "'", con);//it will take from the selection of combobox 
DataTable dt = new DataTable(); 
sql1.Fill(dt); 
con.Open(); 
TimeSpan timespan1; 

timespan1 = dateTimePicker3.Value - dateTimePicker2.Value; 
int TotalDays = timespan1.Days+1;//total days that are taken from the datetimepicker 
MessageBox.Show(TotalDays.ToString());//displaying the date for testing 
+0

我還沒有添加vari能夠爲整數值,但讓我們想要使用的變量是int = finaldays – Darren

+0

[閱讀此](https://stackoverflow.com/questions/7505808/why-do-we-always-prefer-using -parameters-in-sql-statements)當你得到一分鐘 – musefan

+0

用以下代碼替換上面的代碼。 SqlCommand com = new SqlCommand(「Select Leavedest from LeaveTest where Id ='」+ comboBox1.SelectedText +「'」,con); int x =(int)com.ExecuteScalar(); – Koderzzzz

回答

0

嗨,大家好,我發現了另一個替代方案,爲我工作...希望它可以幫助別人誰遇到同樣的困難,因爲我

 con.Open(); 

     string sqlSelectQuery = "Select * FROM LeaveTest"; 
     SqlCommand cmd = new SqlCommand(sqlSelectQuery, con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     if (dr.Read()) 
     { 
      TimeSpan timespan1; 
      timespan1 = dateTimePicker3.Value - dateTimePicker2.Value; 
      int totaldays = timespan1.Days; 
      textBox2.Text = (dr["finaldays"].ToString()); 
      int finaldays = Convert.ToInt32(textBox2.Text)+totaldays; 
     //textbox2 is a temporary textbox(which is invisible)that is used to put the value finaldays in from the database 

      string sql1 = ("Update LeaveTest SET finaldays = '"+ finaldays + "' WHERE Id='" + comboBox1.Text + "'"); //updating the finaldays in database 
      SqlCommand cmd2 = new SqlCommand(sql1, con); 
      con.Close(); 
      con.Open(); 
      SqlDataReader dr2 =cmd2.ExecuteReader(); 
      con.Close(); 


     } 
     con.Close(); 

的代碼會從天2日期時間pickers.The量從數據庫中計算總天數(totaldays)將被檢索並添加了總天數(finaldays)。我的解釋可能有點不好,但我希望你們會受益於此代碼。:)

2

爲此使用SqlCommand。如果您只希望檢索一個值ExecuteScalar是最好的選擇。另外,您應該使用參數來防止SQL注入。

SqlCommand cmd = new SqlCommand("Select finaldays from LeaveTest where Id = @id", con); 
cmd.Parameters.Add("@id", SqlDbType.VarChar); 
cmd.Parameters["@id"].Value = comboBox1.SelectedText; 
try 
{ 
    conn.Open(); 
    int result = (Int32)cmd.ExecuteScalar(); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

如果有可能是每個ID多個結果,你應該使用一個SqlReader和結果存儲在List(比如上例中),或者與他們的工作時,他們被檢索:

SqlCommand cmd = new SqlCommand("Select finaldays from LeaveTest where Id = @id", con); 
cmd.Parameters.Add("@id", SqlDbType.VarChar); 
cmd.Parameters["@id"].Value = comboBox1.SelectedText; 
try 
{ 
    List<int> resultList = new List<int>(); 
    conn.Open(); 
    SqlDataReader reader = command.ExecuteReader(); 
    while (reader.Read()) 
    { 
     resultList.Add((Int32)reader[0]); 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
} 
+0

嗨,我會得到的價值是最後幾天? – Darren

+0

@Darren是的,你會得到在ComboBox中選擇的ID的最後值 –

+0

嗨,我試着將你的代碼添加到我的部分,它似乎沒有任何事情發生... – Darren

0

你重新走上正軌,但這真的是你可以在Google上輕鬆找到答案的地方......

現在你已經填充了你的DataTable,你只需要獲得對列值的引用。

int FinalDays = int.TryParse(dt.Rows[0][0], out FinalDays) ? FinalDays : 0; 

因爲您是C#的新手,我會解釋一下這是幹什麼的。

這是一個「語法糖」,它試圖從DataTable列(即從數據庫獲得的值)解析整數值,並將解析後的整數值輸出到FinalDays。如果解析工作(即該值實際上是一個數字),則FinalDays將設置爲數據庫中的值,如果它不起作用,則FinalDays將設置爲0.

+0

我試過這樣做,但它不工作,他們說不能將對象轉換爲字符串 – Darren

+0

上次我做了這個,我只是在做'Convert.ToInt32(dt.Rows [0] [0])'這是足夠安全的,如果你知道一個事實,價值將是一個數字,所以也許嘗試作爲替代 – Ortund

+0

我也做過這種方法之前也問,但它沒有工作... – Darren

相關問題