web-dev-qa-db-fra.com

Comment récupérer des données d'une base de données SQL Server en C #?

J'ai une table de base de données avec 3 colonnes firstname, Lastname et age. Dans mon application Windows C #, j'ai 3 zones de texte appelées textbox1... J'ai établi la connectivité avec SQL Server à l'aide de ce code:

SqlConnection con = new SqlConnection("Data Source = .;
                                       Initial Catalog = domain;
                                       Integrated Security = True");
con.Open();
SqlCommand cmd = new SqlCommand("Select * from tablename", con);

Je voudrais obtenir des valeurs de ma base de données; si je donne une valeur dans textbox1, il doit correspondre aux valeurs de la base de données et récupérer d'autres détails dans les zones de texte correspondantes.

J'ai essayé cette méthode mais ça ne marche pas:

cmd.CommandText = "select * from tablename where firstname = '" + textBox1.Text + "' ";

Comment puis-je le faire pour récupérer toutes les autres valeurs dans les zones de texte?

27
Vivek Dragon
 public Person SomeMethod(string fName)
        {
            var con = ConfigurationManager.ConnectionStrings["Yourconnection"].ToString();

            Person matchingPerson = new Person();
            using (SqlConnection myConnection = new SqlConnection(con))
            {
                string oString = "Select * from Employees where FirstName=@fName";
                SqlCommand oCmd = new SqlCommand(oString, myConnection);
                oCmd.Parameters.AddWithValue("@Fname", fName);           
                myConnection.Open();
                using (SqlDataReader oReader = oCmd.ExecuteReader())
                {
                    while (oReader.Read())
                    {    
                        matchingPerson.firstName = oReader["FirstName"].ToString();
                        matchingPerson.lastName = oReader["LastName"].ToString();                       
                    }

                    myConnection.Close();
                }               
            }
            return matchingPerson;
        }

Quelques points à noter ici: j'ai utilisé une requête paramétrée, ce qui rend votre code plus sûr. La manière dont vous faites l’instruction select avec la partie "where x = "+ Textbox.Text +"" vous ouvre l’injection SQL. 

J'ai changé ceci en:

  "Select * from Employees where FirstName=@fName"
  oCmd.Parameters.AddWithValue("@fname", fName);  

Donc ce que ce bloc de code va faire est:

Exécutez une instruction SQL sur votre base de données pour voir s’il existe des prénoms correspondant à celui que vous avez fourni. Si c'est le cas, cette personne sera stockée dans un objet Personne (voir ci-dessous dans ma réponse pour la classe). S'il n'y a pas de correspondance, les propriétés de l'objet Personne seront null

Évidemment, je ne sais pas exactement ce que vous essayez de faire, alors il y a quelques points sur lesquels il faut faire attention: quand il y a plus d'une personne avec un nom correspondant, seul le dernier sera sauvegardé et vous sera rendu .. Si vous voulez pouvoir stocker ces données, vous pouvez les ajouter à un List<Person>.

Classe de personne pour le rendre plus propre:

 public class Person
    {
            public string firstName { get; set; }
            public string lastName { get; set; }
    }

Maintenant, appelez la méthode:

Person x = SomeMethod("John");

Vous pouvez ensuite remplir vos champs de texte avec les valeurs provenant de l'objet Personne, comme ceci:

txtLastName.Text = x.LastName;
57
Thousand

Pour récupérer des données de la base de données:

private SqlConnection Conn;
 private void CreateConnection()
 {
    string ConnStr =
    ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
    Conn = new SqlConnection(ConnStr);
 }
 public DataTable getData()
 {
 CreateConnection();
    string SqlString = "SELECT * FROM TableName WHERE SomeID = @SomeID;";
    SqlDataAdapter sda = new SqlDataAdapter(SqlString, Conn);
    DataTable dt = new DataTable();
    try
    {
        Conn.Open();
        sda.Fill(dt);
    }
    catch (SqlException se)
    {
        DBErLog.DbServLog(se, se.ToString());
    }
    finally
    {
        Conn.Close();
    }
    return dt;
}
2
Ashraf Abusada

créez une classe appelée DbManager:

Class DbManager
{
 SqlConnection connection;
 SqlCommand command;

       public DbManager()
      {
        connection = new SqlConnection();
        connection.ConnectionString = @"Data Source=.     \SQLEXPRESS;AttachDbFilename=|DataDirectory|DatabaseName.mdf;Integrated Security=True;User Instance=True";
        command = new SqlCommand();
        command.Connection = connection;
        command.CommandType = CommandType.Text;
     } // constructor

 public bool GetUsersData(ref string lastname, ref string firstname, ref string age)
     {
        bool returnvalue = false;
        try
        {
            command.CommandText = "select * from TableName where firstname=@firstname and lastname=@lastname";
            command.Parameters.Add("firstname",SqlDbType.VarChar).Value = firstname;
 command.Parameters.Add("lastname",SqlDbType.VarChar).Value = lastname; 
            connection.Open();
            SqlDataReader reader= command.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {

                    lastname = reader.GetString(1);
                    firstname = reader.GetString(2);

                    age = reader.GetString(3);


                }
            }
            returnvalue = true;
        }
        catch
        { }
        finally
        {
            connection.Close();
        }
        return returnvalue;

    }

puis double-cliquez sur le bouton de récupération (par exemple, btnretrieve) sur votre formulaire et insérez le code suivant:

 private void btnretrieve_Click(object sender, EventArgs e)
    {
        try
        {
            string lastname = null;
            string firstname = null;
            string age = null;

            DbManager db = new DbManager();

            bool status = db.GetUsersData(ref surname, ref firstname, ref age);
                if (status)
                {
                txtlastname.Text = surname;
                txtfirstname.Text = firstname;
                txtAge.Text = age;       
               }
          }
       catch
          {

          }
   }
1
ABDULKAREEM SHO

nous pouvons utiliser ce type d'extrait et nous utilisons généralement ce type de code pour tester et valider les données de champs de base de données à API

class Db
{
    private readonly static string ConnectionString =
            ConfigurationManager.ConnectionStrings
                        ["DbConnectionString"].ConnectionString;
    public static List<string> GetValuesFromDB(string LocationCode)
    {
        List<string> ValuesFromDB = new List<string>();
        string LocationqueryString = "select BELocationCode,CityLocation,CityLocationDescription,CountryCode,CountryDescription " +
            $"from [CustomerLocations] where LocationCode='{LocationCode}';";
        using (SqlConnection Locationconnection =
                                 new SqlConnection(ConnectionString))
        {
            SqlCommand command = new SqlCommand(LocationqueryString, Locationconnection);
            try
            {
                Locationconnection.Open();
                SqlDataReader Locationreader = command.ExecuteReader();
                while (Locationreader.Read())
                {
                    for (int i = 0; i <= Locationreader.FieldCount - 1; i++)
                    {
                        ValuesFromDB.Add(Locationreader[i].ToString());
                    }
                }
                Locationreader.Close();
                return ValuesFromDB;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
        }

    }

}

espérons que cela pourrait être utile

Remarque: vous avez besoin d'une chaîne de connexion (dans notre cas, "DbConnectionString")

0
shrawan

Vous pouvez utiliser cette méthode simple après avoir configuré votre connection :

private void getAgentInfo(string key)//"key" is your search paramter inside database
    {
        con.Open();
        string sqlquery = "SELECT * FROM TableName WHERE firstname = @fName";

        SqlCommand command = new SqlCommand(sqlquery, con); 
        SqlDataReader sReader;

        command.Parameters.Clear();
        command.Parameters.AddWithValue("@fName", key);
        sReader = command.ExecuteReader();

        while (sReader.Read())
        {
            textBoxLastName.Text = sReader["Lastname"].ToString(); //SqlDataReader
            //["LastName"] the name of your column you want to retrieve from DB

            textBoxAge.Text = sReader["age"].ToString();
            //["age"] another column you want to retrieve
        }
        con.Close();
    }

Maintenant, vous pouvez passer la clé de cette méthode par votre textBoxFirstName comme:

getAgentInfo(textBoxFirstName.Text);
0
Mahmoud Ayman