none
correspondance les variables en c# RRS feed

  • Question

  • Bonjour,

    J'étais habituer avec Access toutefois je rencontre avec Sql server les pb suivants:

    1- Comment déclarer une variable c# attaquer pour un champ d'une table sql server de type smalldatetime:

    DateTime dp = DaTime.Now; ne fonctionne pas?

    Comment déclarer une variable c# pour attaquer un champ Sql server datetime:

    DateTime dp = DaTime.Now; ne fonctionne pas non plus avec le champ dateTime?

    3- Comment déclarer une variable booléenne c# pour attaquer un champ bit

    bool toto = true;  ne fonctionne pas avec le champ "bit"

    D'avance merci

    P.S.


    ps

    • Type modifié Aurel Bera lundi 19 mai 2014 06:24 quest
    jeudi 15 mai 2014 10:55

Réponses

  • Bonjour,

    Vous devriez utiliser les requêtes paramétrés. C'est simple à utiliser et évite les problèmes de conversion entre les dates et les chaines.

    Pouvez-vous nous montrer votre code qui effectue la requête INSERT ou UPDATE sur votre table. Ainsi nous pourrons modifier votre code afin d'utiliser les requêtes paramétrés.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Marqué comme réponse Aurel Bera lundi 19 mai 2014 06:25
    jeudi 15 mai 2014 23:57
    Modérateur
  • Bonjour,

    Le plus simple est d'utiliser donc les requêtes paramétrées. L'idée est d'utiliser les types "int", "DateTime", "double",... et de laisser le pilote SQL Server réaliser automatiquement les conversions. Voici un petit exemple :

    private void MaMéthode(int numero, DateTime dateInscription)
    {
        string Message = "insert into CompteClient(Numero, DateInscription) values (@numero, @dateInscription)";
    
        SqlCommand oCmd = new SqlCommand(Message, oConn);
        oCmd.Parameters.AddWithValue("@numero", numero);
        oCmd.Parameters.AddWithValue("@dateInscription", dateInscription);
        int n = oCmd.ExecuteNonQuery();
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure


    lundi 19 mai 2014 00:06
    Modérateur

Toutes les réponses

  • Re Bonjour,

    Je reviens donc finalement j'ai trouvé la solution en créant une petite appli de test Windowsforms (sans WebService comme dans mon appli principale Silverlight car c'est galère surtout lorsque l'on est pressé par le temps).

    Si le champ est de type smalldatetime il faut passer par string (en tout cas je n'ai pas trouvé mieux):

    string date = dp.ToShortdateString(); et Sql server accepte ce champ .

    Et le champ DateTime de Sqlserver   => string date = dp.ToLongdateString();

    Le champ Booléen (bit) j'ai remplacé par un integer ( c'est pas très originale mais c'est efficace si on ne veut pas chercher trop longtemps).

    P.S.


    ps

    jeudi 15 mai 2014 14:31
  • Bonjour,

    Vous devriez utiliser les requêtes paramétrés. C'est simple à utiliser et évite les problèmes de conversion entre les dates et les chaines.

    Pouvez-vous nous montrer votre code qui effectue la requête INSERT ou UPDATE sur votre table. Ainsi nous pourrons modifier votre code afin d'utiliser les requêtes paramétrés.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Marqué comme réponse Aurel Bera lundi 19 mai 2014 06:25
    jeudi 15 mai 2014 23:57
    Modérateur
  • Bonjour,

    Voici une méthode d'un Webservice que j'utilise avec les dates, la variable etat normalement c'est un booléen mais faute de mieux je l'ai remplacé par un entier:

    [WebMethod]
    public int WebSaveCompteClient(int Numero, int Memory, int Etat,string Pseudo, string Nom, string Prenom,string Rue, string Ville, string Pays, string Cp, string Tel, string Email, string Pwd , string Datenaissance , string DateInscription ,string DateDebAbonnement, int Durée , string DateFinAbonnement)

    {
              Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
              String ConnStr = @"Data Source=MATHURIN\SQLEXPRESS;Initial Catalog=BaseClients;Integrated     Security=True";
              SqlConnection oConn = new SqlConnection(ConnStr);
              oConn.Open();
              int Ret = 0;
              try
              {
                  int numero = Numero; if (numero.ToString().Trim() == "") numero = 0;
                  int memory = Memory; if (memory.ToString().Trim() == "") memory = 0;
                  int etat = Etat; if (etat.ToString().Trim() == "") etat = 0;
                   string nom = Nom; if (nom.Trim() == "") nom = " "; nom = nom.Replace("'", "''"); nom = nom.ToUpper();
                  string prenom = Prenom; if (prenom.Trim() == "") prenom = " "; prenom = prenom.Replace("'", "''"); prenom = prenom.ToUpper();
                  string rue = Rue; if (rue.Trim() == "") rue = " "; rue = rue.Replace("'", "''"); rue = rue.ToUpper();
                  string ville = Ville; if (ville.Trim() == "") ville = " "; ville = ville.Replace("'", "''"); ville = ville.ToUpper();
                  string pays = Pays; if (pays.Trim() == "") pays = " "; pays = pays.Replace("'", "''"); pays = pays.ToUpper();
                  string cp = Cp; if (cp.Trim() == "") cp = " "; cp = cp.Replace("'", "''");
                  string tel = Tel; if (tel.Trim() == "") tel = " "; tel = tel.Replace("'", "''");
                  string email = Email; if (email.Trim() == "") email = " "; email = email.Replace("'", "''");
                  string pwdcompte = Pwd; if (pwdcompte.Trim() == "") pwdcompte = " "; pwdcompte = pwdcompte.Replace("'", "''");
                  string datenaissance = Datenaissance; if (datenaissance.ToString().Trim() == "") datenaissance = "00/00/0000";
                  string dateInscription = DateInscription; if (dateInscription.ToString().Trim() == "") dateInscription = "00/00/0000";
                  string dateDebAbonnement = DateDebAbonnement; if (dateDebAbonnement.ToString().Trim() == "") dateDebAbonnement = "00/00/0000";
                  int durée = Durée; if (durée.ToString().Trim() == "") durée = 0;
                  string dateFinAbonnement = DateFinAbonnement; if (dateFinAbonnement.ToString().Trim() == "") dateFinAbonnement = "00/00/0000";
                  DateTime nt = DateTime.Now;
                  string date = nt.ToShortDateString();

                  string Message = "insert into CompteClient(Numero,  Memory, Etat,  Nom, Prenom, Rue, Ville, Pays, Cp, Tel, Email, Pwd, DateInscription,Naissance,DateDebAbonnement,Durée,DateFinAbonnement )values  (" + numero + "," + memory + "," + etat + ",'" + nom + "','" + prenom + "','" + rue + "','" + ville + "','" + pays + "','" + cp + "','" + tel + "','" + email + "','" + pwdcompte + "'," + date + "," + date + "," + date + "," + durée + "," + date + ")";

                  SqlCommand oCmd = new SqlCommand(Message, oConn);
                  //    oCmd.Parameters.AddWithValue("@image", bytImage1);
                  int n = oCmd.ExecuteNonQuery();
                  Ret = 1;
                  oConn.Close();

              }
              catch (Exception ex)
              {
                  string h = ex.Message;
                  oConn.Close();
                  Ret = 2;
              }
              return Ret;

           }

    D'avance merci


    ps

    vendredi 16 mai 2014 14:32
  • Bonjour,

    Le plus simple est d'utiliser donc les requêtes paramétrées. L'idée est d'utiliser les types "int", "DateTime", "double",... et de laisser le pilote SQL Server réaliser automatiquement les conversions. Voici un petit exemple :

    private void MaMéthode(int numero, DateTime dateInscription)
    {
        string Message = "insert into CompteClient(Numero, DateInscription) values (@numero, @dateInscription)";
    
        SqlCommand oCmd = new SqlCommand(Message, oConn);
        oCmd.Parameters.AddWithValue("@numero", numero);
        oCmd.Parameters.AddWithValue("@dateInscription", dateInscription);
        int n = oCmd.ExecuteNonQuery();
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure


    lundi 19 mai 2014 00:06
    Modérateur
  • Bonjour,

    Merci pour votre réponse elle répond à ma question.

    P.S.


    ps

    lundi 19 mai 2014 06:22