¿Cómo recuperar datos de una database de SQL Server en C #?

Tengo una tabla de database con 3 columnas, nombre, firstname y age . En mi aplicación C # Windows tengo 3 textbox1 llamados textbox1 … Hice mi conectividad a mi server SQL usando este código:

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

Me gustaría get valores de mi database; si doy un valor en textbox1 , tiene que coincidir con los valores en la database y recuperar otros detalles en los cuadros de text correspondientes.

Intenté este método, pero no está funcionando:

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

¿Cómo puedo hacerlo para recuperar todos los demás valores en los cuadros de text?

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

Pocas cosas a tener en count aquí: utilicé una consulta parametrizada, lo que hace que su código sea más seguro. La forma en que está haciendo la instrucción select con la parte "where x = "+ Textbox.Text +"" abre a la inyección SQL.

Cambié esto a:

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

Entonces, ¿qué va a hacer este bloque de código?

Ejecute una instrucción SQL en su database, para ver si hay algún nombre que coincida con el que proporcionó. Si ese es el caso, esa persona se almacenará en un object Persona (ver más abajo en mi respuesta para la class). Si no hay coincidencia, las properties del object Person serán null .

Obviamente, no sé exactamente qué estás tratando de hacer, así que hay algunas cosas a las que debes prestar atención: cuando hay más de 1 persona con un nombre coincidente, solo el último se saveá y se te devolverá. Si desea poder almacenar estos datos, puede agregarlos a una List<Person> .

Clase de persona para que sea más limpio:

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

Ahora para llamar al método:

 Person x = SomeMethod("John"); 

A continuación, puede llenar sus cuadros de text con los valores que provienen del object Persona de esta manera:

 txtLastName.Text = x.LastName; 

crea una class llamada 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; } 

luego haga doble clic en el button recuperar (por ejemplo, btnretrieve) en su formulario e inserte el siguiente código:

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

Para recuperar datos de la database:

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

Puede usar este método simple después de configurar su 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 = oReader["Lastname"].ToString(); //["LastName"] the name of your column you want to retrieve from DB textBoxAge.Text = oReader["age"].ToString(); //["age"] another column you want to retrieve } con.Close(); } 

Ahora puede pasar la key a este método por su textBoxFirstName como:

 getAgentInfo(textBoxFirstName.Text);