none
Concatenation de requette Sql RRS feed

  • Question

  • Bonjour,

    Je cherche a accelere l'insertions de mes requette sql dans la base de donnée,

    dans mes souvenir (sous vb6) on pouvait concatener les requette sql avec des ";", mais j'ai essayer de le fair sur une base de donnée Access et il me remonte une exception,

    INSERT INTO [Table]([ID], [TEXT255_1], [TEXT255_2], [DATE_1], [ENTIERLONG_1]) VALUES ('100915112446486001_f4cc41e7d3434f3d8', 'TEXT1(1)', 'TEXT2(1)', #09/15/2010#, 1) ; INSERT INTO [Table]([ID], [TEXT255_1], [TEXT255_2], [DATE_1], [ENTIERLONG_1]) VALUES ('100915112446486002_df1570ad559148e39', 'TEXT1(2)', 'TEXT2(2)', #09/15/2010#, 2) ;
    

    est ce qu'il existe un moyen de concatener les requettes ? (Insert, Delete, Update ...)

    Cordialement

    Sébastien

     


    Cordialement Sébastien http://www.database2code.com
    mercredi 15 septembre 2010 09:29

Réponses

  • Bonjour,

     

    Pour une connexion avec une base de donnes SQL Server, il est possible de concaténer les requetés, même avec OleDb.

     

    Friend WithEvents OleDbConnection1 As System.Data.OleDb.OleDbConnection
    Me.oleDbConnection1 = New System.Data.OleDb.OleDbConnection() 
    Me.oleDbConnection1.ConnectionString = "Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI;Initial Catalog=Te" + "stDB"
    Dim str As String = "insert into Table_1 (col1, col2) values (1, 'b'); " & vbCr & vbLf & "        insert into Table_1 (col1, col2) values (2, 'y'); "
    Dim com As New OleDbCommand()
    com.Connection = Me.oleDbConnection1
    com.CommandType = CommandType.Text
    com.CommandText = str
    com.Connection.Open()
    com.ExecuteNonQuery()
    com.Connection.Close()
    

     

    Ce problème survient seulement sur les bases de données Acces.

     

    Toutefois, je vous conseille d’utiliser une connexion de type SqlConnection avec les bases de données SQL Server.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    jeudi 16 septembre 2010 13:19

Toutes les réponses

  • Bonjour,

    Il n'est pas possible de concaténer les requêtes sous OleDB. Malheureusement Access est très limité (par rapport à SQL Server) en terme de fonctionnalité pour alimenter des données en masse (BULK INSERT).

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 15 septembre 2010 18:21
    Modérateur
  • Bonjour,

    Quand vous dite, il n'est pas possible de concatener les requette sous Oledb, tout type de base de donnée confondu ? ou seulement pour access ? (est ce que si je fait une connexion SqlServer sous Oledb je peu concatener les requette ? est ce que si dans ma chaine de connexion j'utilise SQLCLI10 cela modiifiera le comportement pour ce qui est de SqlServer ?

    merci,

    Sébastien


    Cordialement Sébastien http://www.database2code.com
    jeudi 16 septembre 2010 06:18
  • Bonjour,

     

    Pour une connexion avec une base de donnes SQL Server, il est possible de concaténer les requetés, même avec OleDb.

     

    Friend WithEvents OleDbConnection1 As System.Data.OleDb.OleDbConnection
    Me.oleDbConnection1 = New System.Data.OleDb.OleDbConnection() 
    Me.oleDbConnection1.ConnectionString = "Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI;Initial Catalog=Te" + "stDB"
    Dim str As String = "insert into Table_1 (col1, col2) values (1, 'b'); " & vbCr & vbLf & "        insert into Table_1 (col1, col2) values (2, 'y'); "
    Dim com As New OleDbCommand()
    com.Connection = Me.oleDbConnection1
    com.CommandType = CommandType.Text
    com.CommandText = str
    com.Connection.Open()
    com.ExecuteNonQuery()
    com.Connection.Close()
    

     

    Ce problème survient seulement sur les bases de données Acces.

     

    Toutefois, je vous conseille d’utiliser une connexion de type SqlConnection avec les bases de données SQL Server.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    jeudi 16 septembre 2010 13:19
  • Bonsoir,

    Merci,

    Sébastien


    Cordialement Sébastien DataBase2Code
    jeudi 16 septembre 2010 19:03
  • Salut ta tou(te)s
     
    Si, il est possible d'accélérer tout ça :
    Non, on ne peut pas mettre bout-à-bout plusieurs requètes.
    Par contre, on peut demander au moteur SQL de traiter les requètes par lots :
    Avant de commencer, tu lances la commande BeginTrans sur l'objet de ta connexion à ta DB.
    Ensuite, tu fais une boucle avec ta série de requètes individuelles, les unes derrière les autres.
    Le moteur entasse ces demandes.
    Quand tu as terminé ta boucle, deux solutions :
    - Soit tu valides le tout avec la commande CommitTrans (toujours sur l'objet de la connexion)
    - Soit tu annules tout avec la commande RollBackTrans
     
    Le gain de temps est très conséquent.
     
    Vala
    Jack - MVP Visual Basic
     
    "Gilles TOURREAU" a écrit dans le message de groupe de discussion : 6050e93e-0896-4f9f-8738-285b4b10931e...

    Bonjour,

    Il n'est pas possible de concaténer les requêtes sous OleDB. Malheureusement Access est très limité (par rapport à SQL Server) en terme de fonctionnalité pour alimenter des données en masse (BULK INSERT).

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr


    __________ Information provenant d'ESET Smart Security, version de la base des signatures de virus 5456 (20100916) __________

    Le message a �t� v�rifi� par ESET Smart Security.

    http://www.eset.com

    Jacques Millet [French MVP - VB]
    vendredi 17 septembre 2010 07:31
  • Bonjour,

    Merci, je connaisai egalement cette solution, mais le probleme ce pose sous access, (sous mysql et sqlserver tout fonctionne, j'utilise insert into table ( column,..) values (),(),() ...) sa divise par 20 le temps pour les insertions.

    J'ai developper un generateur de code, et  j'essayer d'otpimiser les requettes peut importe la base de destination pour que le developpeur n'a pas a s'en soucié.

    Mais apparement avec access, pas d'opimisation posible ...

    Cordialement

    sebastien


    Cordialement Sébastien DataBase2Code
    vendredi 17 septembre 2010 09:56
  • Bonjour,

    Access est loin d'être un SGBD... Je vous conseille vivement de passer à SQL Server Express (qui est gratuit). Si le problème réside sur le fait que SQL Server Express est trop lourd à administrer, vous pouvez utiliser SQL Server Compact Edition qui s'utilise comme une base de données acces (c'est juste un fichier .sdf et aucun serveur/service ne doit être installé... il faut juste le runtime).

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    vendredi 17 septembre 2010 10:01
    Modérateur
  • Bonjour,

    Effectivement, mais le probleme est que je developpe un generateur de code, chaque utilisateur prend la base de donnée qu'il veux ... je ne peu pas le maitriser.

    j'essaye de faire que peu importe la base de donnée, le code generer soit le plus performant, maintenant si ce n'est pas possible en access, sa ne changera rien pour le developpeur ... c'est juste que ce sera plus lent, a lui de choisir sa bonne base de donnée.

    Merci encors pour vos recherche,

    Sébastien


    Cordialement Sébastien DataBase2Code
    vendredi 17 septembre 2010 13:55