webentwicklung-frage-antwort-db.com.de

Wie Abrufen von Daten aus einer SQL Server-Datenbank in C #?

Ich habe eine Datenbanktabelle mit 3 Spalten firstname, Lastname und age. In meiner C # Windows-Anwendung stehen 3 Textfelder mit dem Namen textbox1... zur Verfügung. Ich habe meine Verbindung zu meinem SQL Server mit diesem Code hergestellt:

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

Ich möchte Werte aus meiner Datenbank erhalten. Wenn ich einen Wert in textbox1 gebe, muss er mit den Werten in der Datenbank übereinstimmen und andere Details zu den entsprechenden Textfeldern abrufen.

Ich habe diese Methode ausprobiert, aber sie funktioniert nicht:

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

Wie kann ich es tun, um alle anderen Werte in die Textfelder abzurufen?

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 [email protected]";
                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;
        }

Hier ein paar Dinge zu beachten: Ich habe eine parametrisierte Abfrage verwendet, die Ihren Code sicherer macht. Die Art und Weise, wie Sie die select-Anweisung mit dem "where x = "+ Textbox.Text +""-Teil machen, öffnet die SQL-Injection. 

Ich habe das geändert in:

  "Select * from Employees where [email protected]"
  oCmd.Parameters.AddWithValue("@fname", fName);  

Also, was dieser Codeblock tun wird, ist:

Führen Sie eine SQL-Anweisung für Ihre Datenbank aus, um zu sehen, ob es Vornamen gibt, die mit den von Ihnen angegebenen übereinstimmen. Wenn dies der Fall ist, wird diese Person in einem Personenobjekt gespeichert (siehe unten in meiner Antwort für die Klasse). Wenn es keine Übereinstimmung gibt, sind die Eigenschaften des Person-Objekts null

Natürlich weiß ich nicht genau, was Sie versuchen, also gibt es ein paar Dinge, auf die Sie achten sollten: Wenn mehr als 1 Personen mit einem passenden Namen vorhanden sind, wird nur der letzte gespeichert und an Sie zurückgegeben. Wenn Sie diese Daten speichern möchten, können Sie sie zu einem List<Person> hinzufügen.

Personenklasse, um es sauberer zu machen:

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

Nun rufen Sie die Methode auf:

Person x = SomeMethod("John");

Sie können Ihre Textfelder dann wie folgt mit Werten aus dem Personenobjekt füllen:

txtLastName.Text = x.LastName;
57
Thousand

So rufen Sie Daten aus der Datenbank ab:

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

erstellen Sie eine Klasse namens 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 [email protected] and [email protected]";
            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;

    }

doppelklicken Sie dann auf die Schaltfläche "Abrufen" (z. B. "btnretrieve") in Ihrem Formular und geben Sie den folgenden Code ein:

 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

wir können diesen Snippet-Typ verwenden. Im Allgemeinen verwenden wir diesen Code zum Testen und Validieren von Daten für DB-API-Felder

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;
            }
        }

    }

}

hoffe das könnte hilfreich sein

Hinweis: Ihr braucht eine Verbindungszeichenfolge (in unserem Fall "DbConnectionString")

0
shrawan

Sie können diese einfache Methode verwenden, nachdem Sie Ihre connection eingerichtet haben:

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

Nun können Sie den Schlüssel an diese Methode mit Ihrem textBoxFirstName übergeben:

getAgentInfo(textBoxFirstName.Text);
0
Mahmoud Ayman