Les messages d'information dans le server sql sont-ils localisés?

Je veux capturer les messages de progression lorsque je sauvegarde ma database comme décrit ici .

Cela fonctionne bien, mais je m'inquiète de la façon dont le pourcentage fait est extrait des messages d'information. Dans les commentaires @ChristianHayter propose une regex, qui est spécifique à la langue (dans ce cas l'anglais).

Le server SQL envoie-t-il toujours des messages d'information en anglais ou dépend-il des parameters du système? Si c'est le cas, comment puis-je savoir quel est le format du message? Je pense que je me souviens d'une table dans le server SQL, qui stocke tous ces messages (quelque chose comme "{0} pour cent complet"), mais je ne me souviens pas du nom.

Vous pouvez aussi utiliser

SELECT session_id as SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE') 

Ce sera utile si quelqu'un lance le process à partir d'une autre machine, alors vous pouvez l'utiliser pour get la progression.

Le server SQL envoie-t-il toujours des messages d'information en anglais ou dépend-il des parameters du système?

Pas toujours anglais. C'est la même chose que celle que vous avez sélectionnée lors de l'installation du studio de gestion SQL Server. Vous pouvez également le changer via:

entrez la description de l'image ici

Vérifiez également les versions de langue locales dans SQL Server

Comme mentionné dans mon commentaire ci-dessus, je voulais signaler, si l'utilisation du message fonctionne. C'est le cas, même si je suppose que les identifiants des messages ne changent jamais. Je pense que c'est une hypothèse valide. Comme deuxième hypothèse je suppose, que le message de progrès dans n'importe quelle langue contiendra un inter-nombre, qui représente le progrès.

Que cela va fonctionner:

 Private Sub _SqlConnection_InfoMessage(sender As Object, e As System.Data.SqlClient.SqlInfoMessageEventArgs) Handles _SqlConnection.InfoMessage If _BackupInProgress Then If e.Errors.Count > 0 Then For Each sqlError As SqlError In e.Errors If sqlError.Number = 3211 Then Dim rxPercentageDone = New Regex("(\d*)") Dim match = rxPercentageDone.Match(sqlError.Message) If match.Success Then ' match.Groups(1).Value holds the actual progress value Debug.Print(e.Message) End If End If Next End If End If End Sub 

Vous devez vous abonner à l'événement InfoMessage de la connection sql. Avec le gestionnaire d'events ci-dessus, vous pouvez capturer un message du numéro de message 3211 et valider qu'il contient des informations de progression avec la regex.

Cela devrait être plus robuste que la vérification des texts de message spécifiques à la langue.