2017-07-26 3 views
0

Je suis nouveau en C# Je voudrais savoir comment extraire une valeur entière de la base de données et la stocker dans une variable. Après cela, j'ai besoin d'utiliser cette valeur pour ajouter un autre entier qui est déjà fait et le stocker dans la base de données.Récupération de la base de données int et stockage dans une variable en C#

J'ai cherché beaucoup de méthodes mais la plupart des méthodes qui ont été données le stockent dans une vue de grille de données mais je veux faire le calcul sans montrer.

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

Je n'ai pas ajouté la vari capable encore pour la valeur entière mais laisse prendre que la variable que je veux utiliser est int = finaldays – Darren

+0

[Lire ceci] (https://stackoverflow.com/questions/7505808/why-do-we-always-prefer-using -parameters-in-sql-statements) quand vous obtenez une minute – musefan

+0

Remplacez le code ci-dessus par le code suivant. SqlCommand com = new SqlCommand ("Sélectionner les derniers jours de LeaveTest où Id = '" + comboBox1.SelectedText + "'", con); int x = (int) com.ExecuteScalar(); – Koderzzzz

Répondre

0

Salut les gars j'ai trouvé un autre alternative qui a fonctionné pour moi ... je espère que ça aide les autres qui rencontrent les mêmes difficultés que moi

 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(); 

le code calculerait les jours totaux (totaldays) du 2 datetime pickers.The nombre de jours de la base de données serait être récupéré et ajouté avec le nombre total de jours (finaldays). Mon explication pourrait être un peu mauvais mais j'espère que vous les gars bénéficieraient de ce code. :)

2

Utilisez SqlCommand pour cela. Si vous vous attendez seulement à récupérer une valeur ExecuteScalar est la meilleure option à faire. De plus, vous devez utiliser des paramètres pour empêcher l'injection 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); 
} 

S'il pourrait y avoir plusieurs résultats par ID, vous devez utiliser un SqlReader et stocker les résultats dans un List (comme dans l'exemple) ou travailler avec eux quand ils sont récupérés:

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

Salut la valeur que je voudrais obtenir est les derniers jours? – Darren

+0

@Darren Oui, vous obtiendrez la valeur finaldays pour l'ID sélectionné dans le ComboBox –

+0

Salut j'ai essayé d'ajouter votre code à ma partie et il semble que rien ne se passe ... – Darren

0

Vous êtes sur la bonne voie, mais c'est vraiment quelque chose que vous pourriez facilement trouver une réponse sur Google ...

Maintenant que vous avez rempli votre DataTable, vous avez juste besoin d'obtenir une référence à la valeur de la colonne.

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

Puisque vous êtes nouveau en C#, je vais vous expliquer ce que cela fait.

C'est un peu de "sucre syntaxique" qui tente d'analyser la valeur de la colonne DataTable (c'est-à-dire la valeur obtenue de votre base de données) comme un entier et de sortir la valeur entière analysée à FinalDays. Si l'analyse a fonctionné (c'est-à-dire que la valeur est réellement un nombre), alors FinalDays obtient la valeur de la base de données, et si cela ne fonctionnait pas, alors FinalDays est mis à 0.

+0

J'ai essayé de le faire mais ça ne marche pas ils ont dit ne peuvent pas convertir l'objet en chaîne – Darren

+0

La dernière fois que je l'ai fait, je faisais 'Convert.ToInt32 (dt.Rows [0] [0])' qui est assez sûr si vous savoir pour un fait la valeur sera un nombre alors peut-être essayer cela comme une alternative – Ortund

+0

j'ai fait cette méthode aussi avant de demander, mais ça n'a pas fonctionné ... – Darren