Pb requete sql

Le
Gaëtan
Bonjour

Je souhaiterais faire une méthode qui me permette de réparer une base de
données.

Toutefois une erreur de type SQL Exception est interceptée lors de son
exécution.
D'après le message d'erreur le problème se situerait près de la syntaxe 'go'.

Pourtant lorsque je lance cette même requête dans SQL serveur elle
fonctionne parfaitement.

Je vous présente le code.

public static void reparerBase(string nomServeur, string nomBase)
{
SqlConnection _sqlConx = Init(nomServeur);
_sqlConx.Open();

StringBuilder _requete = new StringBuilder();


_requete.AppendLine("Use master");
_requete.AppendLine(" go ");
_requete.Append("SP_DBOPTION
").Append(nomBase).AppendLine(", single, true");
_requete.AppendLine(" go ");
_requete.Append(" DBCC CHECKDB (").Append(nomBase).Append(",
REPAIR_REBUILD)");


SqlCommand _versionSql = new SqlCommand(_requete.ToString(),
_sqlConx);
_versionSql.ExecuteNonQuery();

_sqlConx.Close();
}

Une copie de la syntaxe de la requête :
Use master
go
sp_dboption 'BaseTest', single, true
go
DBCC CHECKDB('BaseTest', REPAIR_REBUILD)

Merci pour vos suggestions.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Yanos El Guerilleros
Le #12163961
Salut,

"GO" n'est pas une instruction TransactSQL, mais une commande qui est
reconnue par les utilitaires de gestion SQL de Microsoft pour séparer
des scripts. Par conséquent mettre "GO" dans une requête va provoquer
une erreur.

GO est un séparateur de script donc si tu as besoin d'un GO alors il
faut découper ton script à chaque fois que tu trouve un GO et tu exécute
indépendamment chaque script.

Dans ton cas le GO n'est pas nécessaire car tes instructions peuvent
être effectuées les unes après les autres sans problème.

A++

Yanos

Gaëtan a écrit :
Bonjour

Je souhaiterais faire une méthode qui me permette de réparer une base de
données.

Toutefois une erreur de type SQL Exception est interceptée lors de son
exécution.
D'après le message d'erreur le problème se situerait près de la syntaxe 'go'.

Pourtant lorsque je lance cette même requête dans SQL serveur elle
fonctionne parfaitement.

Je vous présente le code.

public static void reparerBase(string nomServeur, string nomBase)
{
SqlConnection _sqlConx = Init(nomServeur);
_sqlConx.Open();

StringBuilder _requete = new StringBuilder();


_requete.AppendLine("Use master");
_requete.AppendLine(" go ");
_requete.Append("SP_DBOPTION
").Append(nomBase).AppendLine(", single, true");
_requete.AppendLine(" go ");
_requete.Append(" DBCC CHECKDB (").Append(nomBase).Append(",
REPAIR_REBUILD)");


SqlCommand _versionSql = new SqlCommand(_requete.ToString(),
_sqlConx);
_versionSql.ExecuteNonQuery();

_sqlConx.Close();
}

Une copie de la syntaxe de la requête :
Use master
go
sp_dboption 'BaseTest', single, true
go
DBCC CHECKDB('BaseTest', REPAIR_REBUILD)

Merci pour vos suggestions.



Publicité
Poster une réponse
Anonyme