2009-08-28 21 views
12

estoy tratando de escribir una dirección local del programa y el sistema de instalación de red de mi casa, y yo creo que tengo las tecnologías clavado:.¿Cómo me conecto a una base de datos SQL desde C#?

  • C#/NET/WPF para el cliente
  • Lua para el soporte de instalación de secuencias de comandos (a través de LuaInterface)
  • SQL Server Express para el mantenimiento de una base de datos de los programas de

Sin embargo estoy seguro de lo que voy a utilizar específicamente para conectarse C# para la base de datos. ¿Hay algo incorporado en el marco de .NET para esto? Puntos de bonificación si tiene una sugerencia sobre lo que debería utilizar para interactuar con dicha base de datos.

Respuesta

17

Salida

Estoy seguro de que hay mucho más por ahí - sólo Google para "ADO.NET" y "Tutorial". .....

ACTUALIZACIÓN:

Si desea conectarse a su local de SQL Server Express, y conectarse a la base de datos "Neptuno", y leer los 5 mejores clientes de la tabla "Clientes", que tendría que hacer algo como esto:

string connectionString = "server=(local)\SQLExpress;database=Northwind;integrated Security=SSPI;"; 

using(SqlConnection _con = new SqlConnection(connectionString)) 
{ 
    string queryStatement = "SELECT TOP 5 * FROM dbo.Customers ORDER BY CustomerID"; 

    using(SqlCommand _cmd = new SqlCommand(queryStatement, _con)) 
    { 
     DataTable customerTable = new DataTable("Top5Customers"); 

     SqlDataAdapter _dap = new SqlDataAdapter(_cmd); 

     _con.Open(); 
     _dap.Fill(customerTable); 
     _con.Close(); 

    } 
} 

Ahora tendría los 5 mejores clientes de su base de datos Northwind en el DataTable y podrá inspeccionarlos, imprimirlos, manipularlos, lo que sea que desee hacer.

¡Eso es ADO.NET en acción!

En cuanto a los detalles de la cadena de conexión - las opciones que puede utilizar y lo que debe ser similar, echa un vistazo a la página web Connection Strings - que tiene un montón de ejemplos y explicaciones.

Marc

+0

Um, esto puede sonar como una pregunta tonta, pero ¿cómo se relaciona ADO.NET con mi pregunta? – RCIX

+1

ADO.NET es el subsistema de .NET para conectarse desde C# o VB.NET a una base de datos como SQL Server, SQL Server Express, Oracle o lo que sea –

+0

Ok, ¿cómo se utiliza LINQ to SQL o similar con esto? – RCIX

0

Claro, puede usar las clases de System.Data.SqlClient, aunque la mayoría de las personas usarán un ORM. Yo uso LLBLGen Pro.

13

SqlConnection

objeto está hecho para esto.

Ej:

SqlConnection conn = new SqlConnection(
    "Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI"); 

o

SqlConnection conn = new SqlConnection(
"Data Source=DatabaseServer; Initial Catalog=Northwind; User ID=YourUserID; Password=YourPassword"); 

conn.Open(); // opens the database connection 

Editar:

Después de hacer todas sus cosas hay que cerrar la conexión por

conn.Close(); 

Fuente de datos: identifica el servidor. Podría ser una máquina local, un nombre de dominio de máquina o una dirección IP.

Catálogo inicial: Nombre de la base de datos.

seguridad integrada: Establecer a SSPI para hacer la conexión con el inicio de sesión de Windows del usuario

ID de usuario: Nombre de usuario configurado en SQL Server.

Contraseña: Contraseña que coincide con el ID de usuario de SQL Server.

+0

¿Hay alguna específica motivo de la d propio voto? – rahul

+0

+1 y un poco curioso sobre el voto negativo hacia. –

+1

+1 de un compañero "receptor negativo sin comentario". No hay nada incorrecto o inútil en esta respuesta. –

4

Para conectarse a SQL Server Express no necesita nada más que System.Data, que es un conjunto .NET estándar. Simplemente use las clases SqlXXX y habrá terminado.

Sin embargo, escribir código ADO.NET mundano es muy aburrido, por lo que es muy común usar un ORM o un asignador de conjuntos de resultados menos pesados ​​como BLToolkit.

Y, por último, considere usar SQL Server CE. Se trata de un motor de base de datos incrustado de un solo archivo, totalmente compatible con ACID, que admite prácticamente cualquier característica que pueda esperar de un SQL RDBMS.

+0

1 de diffrentiating ORM betweeen y asignador de resultados. – TheVillageIdiot

1

Actualmente la forma más fácil de conectar a su base de datos y realizar consultas en C# es LinqToSQL. Le ahorrará muchos dolores de cabeza en comparación con el uso de conexiones ADO "de la vieja escuela".

1

Puede usar el espacio de nombres ADO.Net y System.Data.SqlClient para el mismo. Le aconsejaré que vaya con el marco Entidades (ORM). A continuación encontrará enlaces para caminar Marco de la entidad a través

http://thedatafarm.com/LearnEntityFramework/tutorials/creating-an-ado-net-entity-framework-entity-data-model/

http://thedatafarm.com/LearnEntityFramework/tutorials/use-an-entity-framework-entity-as-a-winforms-data-source/

+0

Eso se refiere al uso de un objeto como base de datos, he configurado una instancia de SQL Server Express para eso. – RCIX

+0

EF parece un poco exagerado solo para una muestra de principiante muy pequeña ... complica innecesariamente las cosas, en mi opinión. Aprende los principios básicos de ADO.NET primero. –

+0

Estoy de acuerdo con marc_s.its siempre es bueno aprender fundamentos primero y yo no creo que tomará mucho tiempo también (por ADO.Net) – Mahin

1

yo recomendaría usar Microsoft's Patterns & Practices Enterprise Library. Usted utilizaría específicamente el The Data Access Application Block.

Un extracto de MSDN:

los datos de acceso bloque de aplicación ofrece las siguientes ventajas:

  • que utiliza la funcionalidad proporcionada por ADO.NET 2.0 y, con ella, se puede uso Funcionalidad ADO.NET junto con la funcionalidad del bloque de la aplicación.
  • Reduce la necesidad de escribir código repetitivo para realizar tareas estándar .
  • Ayuda a mantener prácticas consistentes de acceso a datos, tanto dentro de una aplicación como en toda la empresa.
  • Reduce las dificultades para cambiar el tipo de base de datos.
  • Alivia los desarrolladores de aprender diferentes modelos de programación para diferentes tipos de bases de datos.
  • que reduce la cantidad de código que los desarrolladores deben escribir cuando portuarias aplicaciones a diferentes tipos de bases de datos .

He utilizado este método durante años y ha sido muy exitosa hasta el momento. ¡Buena suerte!

0

me gustaría que esto ayudará sólo tratar estos ..

@CLASS

using System.Data; 
using System.Data.SqlClient; 

namespace WindowsFormsApplication2 
{ 
class clsDB 
{ 
    public SqlDataAdapter mDataAdapter = new SqlDataAdapter(); 
    public DataSet mDataSet = new DataSet(); 
    public SqlConnection mConn; 

    public clsDB() 
    { 
     mConn = new SqlConnection("Data Source=(the data source);Initial Catalog=sample;User ID=(the id);Password=(the password)"); 
    } 



    public void SQLDB(string strSQL) 
    { 
     try 
     { 
      mDataAdapter = new SqlDataAdapter(new SqlCommand(strSQL, mConn)); 
      mDataSet = new DataSet(); 
      mDataAdapter.Fill(mDataSet); 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      mConn.Close(); 
     } 

    } 

    public void ClearRes() 
    { 
     mDataAdapter.Dispose(); 
     mDataAdapter = null; 
     mDataSet.Dispose(); 
     if (mConn.State != ConnectionState.Closed) 
     { 
      mConn.Close(); 

     } 

    } 

} 
} 

@LOGIN

public partial class Login : Form 
{ 
    clsDB x = new clsDB(); 

    public Login() 
    { 
     InitializeComponent(); 
    } 

    private void btnSubmit_Click(object sender, EventArgs e) 
    { 
      x.SQLDB("select * from tbl_accounts where u_username ='" + txtUser.Text + "' and u_password ='" + txtPass.Text + "'"); 
      if (x.mDataSet.Tables[0].Rows.Count > 0) 
      { 
       Main a = new Main(); 
       this.Hide(); 
       a.Show(); 
      } 
      else 
      { 
       MessageBox.Show("wrong username or password"); 
      } 
    } 

@MAIN ACCESO

namespace WindowsFormsApplication2 
{ 
public partial class Main : Form 
{ 
    clsDB x = new clsDB(); 

    public Main() 
    { 
     InitializeComponent(); 
    } 

    private void btnAdd_Click(object sender, EventArgs e) 
    { 
     x.SQLDB("insert into tbl_info (u_lastname, u_firstname, u_middlename) values ('" + atxtLN.Text + "','" + atxtFN.Text + "','" + atxtFN.Text + "')"); 
     fillgrid(); 
    } 

    private void Main_Load(object sender, EventArgs e) 
    { 
     x.SQLDB(" select * from tbl_info "); 
     dgv1.DataSource = x.mDataSet.Tables[0]; 
     fillgrid(); 
    } 
    void fillgrid() 
    { 
     x.SQLDB("select * from tbl_info"); 
     dgv1.DataSource = null; 
     dgv1.DataSource = x.mDataSet.Tables[0]; 
    } 
    void search() 
    { 
     x.SQLDB("SELECT * from tbl_info where u_id like '" + etxtID.Text + "%' order by u_id"); 
     if (x.mDataSet.Tables[0].Rows.Count > 0) 
     { 
      x.mDataAdapter.Fill(x.mDataSet, "tbl_info"); 
      dgv1.DataSource = x.mDataSet.Tables["tbl_info"].DefaultView; 

      etxtLN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_lastname"].Value.ToString(); 
      etxtFN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_firstname"].Value.ToString(); 
      etxtMN.Text = dgv1.Rows[dgv1.CurrentRow.Index].Cells["u_middlename"].Value.ToString(); 
     } 
     else if (etxtID.Text == "Type User ID to Edit") 
     { 
      etxtLN.Text = ""; 
      etxtFN.Text = ""; 
      etxtMN.Text = ""; 
     } 
     else 
     { 
      etxtLN.Text = ""; 
      etxtFN.Text = ""; 
      etxtMN.Text = ""; 
     } 
    } 
    private void etxtID_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void etxtID_Enter(object sender, EventArgs e) 
    { 
     etxtID.Text = ""; 
     etxtID.ForeColor = Color.Black; 
    } 

    private void etxtID_Leave(object sender, EventArgs e) 
    { 
     if (etxtID.Text == "") 
     { 
      etxtID.ForeColor = Color.Gray; 
      etxtID.Text = "Type User ID to Edit"; 

      x.SQLDB(" select * from tbl_info "); 
      dgv1.DataSource = x.mDataSet.Tables[0]; 
      fillgrid(); 
     } 
    } 

    private void etxtID_KeyUp(object sender, KeyEventArgs e) 
    { 
     search(); 
    } 

    private void btnUpdate_Click(object sender, EventArgs e) 
    { 
     x.SQLDB("UPDATE tbl_info set u_lastname ='" + etxtLN.Text + "', u_firstname ='" + etxtFN.Text + "', u_middlename ='" + etxtMN.Text + "' where u_id =" + etxtID.Text); 
     MessageBox.Show("Operation Successful!"); 
     fillgrid(); 
    } 

    private void btnDelete_Click(object sender, EventArgs e) 
    { 
     x.SQLDB("delete from tbl_info where u_id =" + dtxtID.Text + ""); 
     MessageBox.Show("Operation Successful!"); 
     fillgrid(); 
    } 
} 
} 
Cuestiones relacionadas