none
c# sqlce Update RRS feed

  • Question

  • Salut a tous

    Qulqu'un peut me dire ou est le probleme avec ce code.

     

     

    SqlCeConnection cn = new SqlCeConnection(ConnectString());
    if (cn.State == ConnectionState.Closed)
    {
    cn.Open();
    }
    string SQL = "UPDATE CoolPeople SET @LastName='"+t1.Text+"', @FirstName='"+t2.Text+"', @URL='"+t3.Text+"' WHERE @CoolPeopleID = ?";
    SqlCeCommand cmd = new SqlCeCommand(SQL, cn);
    cmd.Parameters.Add(
    new SqlCeParameter("@LastName", SqlDbType.NVarChar, 40));
    cmd.Parameters.Add(
    new SqlCeParameter("@FirstName", SqlDbType.NVarChar, 40));
    cmd.Parameters.Add(
    new SqlCeParameter("@URL", SqlDbType.NVarChar, 256));
    cmd.Parameters[
    "@LastName"].Value = t1.Text;
    cmd.Parameters[
    "@FirstName"].Value = t2.Text;
    cmd.Parameters[
    "@URL"].Value = t3.Text;
    cmd.ExecuteNonQuery();
    cn.Close();

    Je recois l'erreur suivante

    L'exception System.Data.SqlServerCe.SqlCeException n'a pas été gérée
      Message="Une erreur s'est produite lors de l'analyse de la requête. [ Token line number = 1,Token line offset = 23,Token in error = @LastName ]"
      Source="SQL Server Compact ADO.NET Data Provider"
      HResult=-2147217900
      NativeError=25501
      StackTrace:
           à System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan()
           à System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior behavior, String method, ResultSetOptions options)
           à System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
           à SqlCeDB1.fmain.btnUpdate_Click(Object sender, EventArgs e) dans C:\Documents and Settings\Daniel Morais\Mes documents\Visual Studio 2008\Projects\SqlCeDB1\SqlCeDB1\fmain.cs:ligne 271
           à System.Windows.Forms.Control.OnClick(EventArgs e)
           à System.Windows.Forms.Button.OnClick(EventArgs e)
           à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           à System.Windows.Forms.Control.WndProc(Message& m)
           à System.Windows.Forms.ButtonBase.WndProc(Message& m)
           à System.Windows.Forms.Button.WndProc(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           à System.Windows.Forms.Application.Run(Form mainForm)
           à SqlCeDB1.Program.Main() dans C:\Documents and Settings\Daniel Morais\Mes documents\Visual Studio 2008\Projects\SqlCeDB1\SqlCeDB1\Program.cs:ligne 18
           à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           à System.Threading.ThreadHelper.ThreadStart()
      InnerException:

     

    MERCI!


    BigDan
    lundi 30 août 2010 16:06

Réponses

  • Bonjour,

    Il ne devrait plus y avoir de + pour constituer l'instruction SQL qui serait :

    UPDATE CoolPeople SET LastName=@LastName, FirstName=@FirstName WHERE CoolPeopleID = @CoolPeopleID

    Et ensuite on définit chacun de ces paramètres...

    Egalement, le paramètre n'est pas à encadrer par ' par exemple pour une chaîne. Il ne faut pas voir cela comme des emplacements dans laquelle @V sera remplacé par sa valeur mais comme de véritables variables (la valeur présente dans la variable @v sera affecté à la colonne) et comme en csharp une chaine litérale est entre guillemets mais une variable se suffit à elle-même...

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 1 septembre 2010 14:33
    Modérateur

Toutes les réponses

  • Bonjour,

    Votre requête SQL est incorrecte :

    string SQL = "UPDATE CoolPeople SET LastName=@LastName..."
    

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mardi 31 août 2010 07:13
    Modérateur
  • Merci Gilles

    Ca fonctionne maintenant juste une erreur de placement de '" + + "' au mauvais endroit

    j'ai du refaire le tout et ca fonctionne

    Mais ceci cause des erreur  LastName=@LastName  que je n'arrive pas a comprendre mais j'ai contourner le tout

    Merci


    BigDan
    mardi 31 août 2010 13:29
  • Bonjour,

    Il ne devrait plus y avoir de + pour constituer l'instruction SQL qui serait :

    UPDATE CoolPeople SET LastName=@LastName, FirstName=@FirstName WHERE CoolPeopleID = @CoolPeopleID

    Et ensuite on définit chacun de ces paramètres...

    Egalement, le paramètre n'est pas à encadrer par ' par exemple pour une chaîne. Il ne faut pas voir cela comme des emplacements dans laquelle @V sera remplacé par sa valeur mais comme de véritables variables (la valeur présente dans la variable @v sera affecté à la colonne) et comme en csharp une chaine litérale est entre guillemets mais une variable se suffit à elle-même...

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mercredi 1 septembre 2010 14:33
    Modérateur
  • Merci beaucoup Patrice

    A plus


    BigDan
    mercredi 1 septembre 2010 14:36