Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb requete sql

1 réponse
Avatar
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.

1 réponse

Avatar
Yanos El Guerilleros
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.