web-dev-qa-db-fra.com

Comment se connecter à une base de données SQL à partir de C #?

J'essaie d'écrire un système local de gestion de programme et d'installation pour mon réseau domestique, et je pense avoir maîtrisé les technologies:

  • C #/.NET/WPF pour le client
  • Lua pour le support de script d'installation (via LuaInterface)
  • SQL Server Express pour la maintenance d'une base de données de programmes

Cependant, je ne sais pas exactement ce que je vais utiliser pour connecter C # à la base de données. Y a-t-il quelque chose de construit dans le framework .NET pour cela? Points bonus si vous avez une suggestion sur ce que je devrais utiliser pour interagir avec ladite base de données.

17
RCIX

Check-out 

Je suis sûr qu'il y en a beaucoup plus - juste sur Google pour "ADO.NET" et "Tutorial" ......

METTRE À JOUR:

Si vous souhaitez vous connecter à votre SQL Server Express local, à la base de données "Northwind" et lire les 5 principaux clients de la table "Clients", procédez comme suit:

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

   }
}

Vous avez maintenant les 5 principaux clients de votre base de données Northwind dans le DataTable et vous pouvez les inspecter, les imprimer, les manipuler - tout ce que vous voulez faire.

C'est ADO.NET en action!

En ce qui concerne les détails de la chaîne de connexion - quelles options vous pouvez utiliser et à quoi elle devrait ressembler, consultez le Connection Strings site Web - il contient des tonnes d'exemples et d'explications.

Marc

21
marc_s

SqlConnection

l'objet est fait pour cela.

Par exemple:

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

ou

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

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

Modifier:

Après avoir fait toutes vos affaires, vous devez fermer la connexion en

conn.Close();

Source de données : Identifie le serveur. Peut être une machine locale, un nom de domaine d'ordinateur ou une adresse IP.

Catalogue initial : Nom de la base de données.

Sécurité intégrée : paramétré sur SSPI pour établir une connexion avec la connexion Windows de l'utilisateur

ID utilisateur : Nom de l'utilisateur configuré dans SQL Server.

Mot de passe : Mot de passe correspondant à l'ID utilisateur SQL Server.

15
rahul

Pour vous connecter à SQL Server Express, vous n'avez besoin que de System.Data, qui est un assemblage .NET standard. Utilisez simplement SqlXXX classes et vous aurez terminé.

Cependant, écrire du code ADO.NET banal est très ennuyeux, il est donc très courant d'utiliser un mappeur de jeu de résultats ORM ou moins lourd, tel que BLToolkit .

Et enfin, envisagez d'utiliser SQL Server CE. Il s'agit d'un moteur de base de données intégré entièrement compatible ACID, basé sur un seul fichier, qui prend en charge à peu près toutes les fonctionnalités que vous pouvez attendre d'un SGBDR SQL.

4
Anton Gogolev

Actuellement, le moyen le plus simple de se connecter à votre base de données et d'effectuer des requêtes en C # est LinqToSQL . Cela vous évitera beaucoup de maux de tête par rapport à l'utilisation de connexions "old-school" ADO. 

1
Adrian Grigore

Vous pouvez utiliser les espaces de noms ADO.Net et System.Data.SqlClient pour la même chose. Je vous conseillerai d'aller avec Entities Framework (ORM). Veuillez trouver ci-dessous des liens pour Entity Framework

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/

1
MRG

Je recommanderais d'utiliser la bibliothèque de modèles de Microsoft et sa pratique . Vous utiliseriez spécifiquement le le bloc d'application d'accès aux données .

Un extrait de MSDN:

Le bloc d'application d'accès aux données Offre les avantages suivants:

  • Il utilise la fonctionnalité fournie par ADO.NET 2.0 et vous permet D'utiliser la fonctionnalité ADO.NET avec La fonctionnalité du bloc d'application.
  • Cela réduit le besoin d'écrire du code standard pour effectuer des tâches standard .
  • Il aide à maintenir des pratiques cohérentes d'accès aux données, à la fois dans une application Et dans l'ensemble de l'entreprise.
  • Cela réduit les difficultés pour changer le type de base de données.
  • Cela évite aux développeurs d'apprendre différents modèles de programmation Pour différents types de bases de données. 
  • Cela réduit la quantité de code que les développeurs doivent écrire lorsqu'ils portent des applications Dans différents types de bases de données .

J'ai utilisé cette méthode pendant des années et cela a été très fructueux jusqu'à présent. Bonne chance!

1
Mr. Smith

Je souhaite que cela aidera Juste essayer ces ..

@CLASSE

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

        }

    }

}
}

@S'IDENTIFIER

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

@ ACCÈS PRINCIPAL

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

Bien sûr, vous pouvez simplement utiliser les classes de System.Data.SqlClient, bien que la plupart des gens utilisent un ORM. J'utilise LLBLGen Pro .

0
Noon Silk