C# SqlServer Faire Un CRUD simplement

Parmi les choses à savoir faire absolument en programmation : dialoguer avec la base de données ! sans quoi il ne sert à rien de programmer, car on a besoin de persister (sauver) des données, et les réutiliser. Nous allons dans un premier temps entrer en contact avec la base de données, et ensuite requêter des données avec du SQL.

Contenu

Faire du CRUD en C# avec SQL Server

Connexion à la base de données

Tout d’abord sachez qu’il y a deux façons de se connecter à la base de données, la connexion avec les identifiants Windows, ou la connexion avec les identifiant de l’utilisateur de la base de données

Connexion à Sqlserver avec les identifiants de Windows

using System;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.Data.SqlClient;

namespace scraper
{
    class Program
    {
        // http://lgmorand.developpez.com/dotnet/regex/
        static void Main(string[] args)
        {
            SqlConnection myConnection = new SqlConnection("Server=[myserver];Database=[DBSQL];Trusted_Connection=true");
            myConnection.Open();
           }
    }
}

Il suffit d’ajouter « Trusted_Connection=true » pour indiquer que l’on veut utiliser les identifiants de Windows.

Connexion à Sqlserver avec les identifiants utilisateur

Maintenant, la seconde façon de se connecter est d’utiliser les identifiant de connexion à la base de données de l’utilisateur créé pour la base.

using System;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.Data.SqlClient;

namespace scraper
{
    class Program
    {
        // http://lgmorand.developpez.com/dotnet/regex/
        static void Main(string[] args)
        {

            SqlConnection myConnection = new SqlConnection("Data Source=myservername;Initial Catalog=DBSQL;User ID=UserName;Password=Password");
            myConnection.Open();
           }
    }
}

Ok là c’est écrit un peu à l’arrache, mais pour bien faire, il faut bien prévoir le cas où la connexion à la base échoue, donc on va mettre dans une clause try-catch.

using System;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.Data.SqlClient;

namespace scraper
{
    class Program
    {
        // http://lgmorand.developpez.com/dotnet/regex/
        static void Main(string[] args)
        {
            SqlConnection myConnection = new SqlConnection("Server=[servdom];Database=[SAGESQL];Trusted_Connection=true");
            try {
                myConnection.Open();
            }
            catch(Exception e) {
                Console.WriteLine(E.Message);
                Console.ReadLine();
            }
       }
    }
}

Création d’une table

CREATE TABLE [dbo].[references](
  [id] int IDENTITY(1,1) PRIMARY KEY,
  [reference] [varchar](100) NOT NULL,
  [description] [varchar](50) NULL,
  [regroupement] [varchar](50) NULL
) ON [PRIMARY]

Nous allons utiliser Management Studio pour créer la table. Vous insérez ce script dans une fenêtre de Management Studio, sélectionnez le texte et faites F5 pour créer la table.

Insertion d’un enregistrement

Sans plus tarder, faison un INSERT dans la table « references », à noter que references est un mot clé dans sqlServer ! mais on peut quand même l’utiliser en l’entourant de crochet [references]

public void InsertActivity(string activity)
 {
     string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
     SqlConnection conn = GetConnexion();
     SqlCommand sql = new SqlCommand("INSERT INTO [FREZAL_HISTORY] (UserName,Date,TableName,ColumnName) VALUES (@UserName, @Date,@TableName,@ColumnName)", conn);
     conn.Open();
     sql.Parameters.Add("@UserName", System.Data.SqlDbType.VarChar);
     sql.Parameters.Add("@Date", System.Data.SqlDbType.DateTime);
     sql.Parameters.Add("@TableName", System.Data.SqlDbType.VarChar);
     sql.Parameters.Add("@ColumnName", System.Data.SqlDbType.VarChar);

     sql.Parameters["@UserName"].Value = userName;
     sql.Parameters["@Date"].Value = DateTime.Now;
     sql.Parameters["@TableName"].Value = "PriceGrabber";
     sql.Parameters["@ColumnName"].Value = activity;

     sql.ExecuteNonQuery();
     return;
 }

 

Select d’un enregistrement

public bool HasAlready(string reference)
{
    try
    {
        SqlConnection conn = GetConnexion();
        conn.Open();
        SqlCommand sql = new SqlCommand("SELECT count(*) FROM [FREZAL_PG_REFERENCES] WHERE reference = @reference", conn);
        sql.Parameters.Add("@reference", System.Data.SqlDbType.VarChar);
        sql.Parameters["@reference"].Value = reference.Trim();

        int a = (Int32) sql.ExecuteScalar();
        if (a > 0)
        {
            return true;
        } else
        {
            return false;
        }
    }
    catch(Exception e)
    {
        Console.WriteLine(e.Message);
    }

    return false;

}

 

Update d’un enregistrement

public void UpdateVendorUrl(Url url)
{
    SqlConnection conn = GetConnexion();
    SqlCommand sql = new SqlCommand("UPDATE [OMG_PG_URLS] SET url = @url WHERE id = @id",conn);
    sql.Parameters.Add("@url", System.Data.SqlDbType.VarChar);
    sql.Parameters.Add("@Id", System.Data.SqlDbType.Int);


    sql.Parameters["@url"].Value = url.url;
    sql.Parameters["@id"].Value = url.id;

    conn.Open();
    sql.ExecuteNonQuery();

    return;
}

 

Delete d’une enregistrement

public void DeleteReference(string reference)
{
    try
    {
        SqlConnection conn = this.GetConnexion();
        conn.Open();
        SqlCommand sql = new SqlCommand("delete from [OMG_PG_REFERENCES] where reference = '" + reference + "'",conn);
        sql.ExecuteNonQuery();
        sql.Dispose();
        conn.Close();
    } catch(Exception e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}

 

Retour en haut