OVH Cloud OVH Cloud

Executer un .sql depuis C#

3 réponses
Avatar
Gislain
Bonjour,

Je cherche désespérément à exécuter un fichier .SQL avec un ExecuteNonQuery,
mais je me heurte à un msg d'erreur SQL m'indiquant une erreur de syntaxe
près du GO (faux, ça fonctionne !!) et que CREATE/ALTER PROCEDURE doit être
la 1ere instruction dans un script !!!!

Au dessous vous avez
----------------------------------------
. Extrait du message d'erreur
. Le script à jouer
. Le code C#


Extrait du message d'erreur
----------------------------------------
{System.Data.SqlClient.SqlException: Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection)
etc...

Voici mon fichier .SQL (Je précise que le SET NOEXEC ON est voulu !!!=
--------------------------------------------------------------------------------
SET NOEXEC ON
GO
DROP PROCEDURE spr_gr_test
GO
CREATE PROCEDURE spr_gr_test
as
begin
PRINT 'titi'
end
GO

Et voici mon code C#
----------------------------------------
SqlCommand __cmd = myConnection.CreateCommand();
StreamReader __streamReader = null;
string __myQuery = "";
int __rc = 0;

try
{
__streamReader = new
StreamReader(@"C:\Data\Dvlp\SQL.2005\CheckStoredProcedure\CheckStoredProcedure\SQLQuery1.sql");

__myQuery = __streamReader.ReadToEnd();
__cmd.CommandType = CommandType.Text;
__cmd.CommandText = __myQuery;
__rc = __cmd.ExecuteNonQuery();
Debug.WriteLine(__rc.ToString());
}
catch (Exception exp)
{
Debug.WriteLine(exp.ToString());
}
finally
{
if (__streamReader != null)
__streamReader.Close();
}



Qui a une idée ?

Merci d'avance

Gislain

3 réponses

Avatar
Sylvain Lafontaine
J'ai l'impression que vous prenez la commande ExecuteNonQuery comme étant
quelque chose d'identique à isql ou à osql. À mon avis, ExecuteNonQuery est
incapable de diviser votre fichier sql en ses "batches" constitutives.

Avez-vous essayé de séparer votre fichier en ses éléments constitutifs (ou
"batch") et de les envoyer séparément, en laissant tomber la commande GO
bien entendu?

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Gislain" wrote in message
news:
Bonjour,

Je cherche désespérément à exécuter un fichier .SQL avec un
ExecuteNonQuery, mais je me heurte à un msg d'erreur SQL m'indiquant une
erreur de syntaxe près du GO (faux, ça fonctionne !!) et que CREATE/ALTER
PROCEDURE doit être la 1ere instruction dans un script !!!!

Au dessous vous avez
----------------------------------------
. Extrait du message d'erreur
. Le script à jouer
. Le code C#


Extrait du message d'erreur
----------------------------------------
{System.Data.SqlClient.SqlException: Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection)
etc...

Voici mon fichier .SQL (Je précise que le SET NOEXEC ON est voulu !!! > --------------------------------------------------------------------------------
SET NOEXEC ON
GO
DROP PROCEDURE spr_gr_test
GO
CREATE PROCEDURE spr_gr_test
as
begin
PRINT 'titi'
end
GO

Et voici mon code C#
----------------------------------------
SqlCommand __cmd = myConnection.CreateCommand();
StreamReader __streamReader = null;
string __myQuery = "";
int __rc = 0;

try
{
__streamReader = new
StreamReader(@"C:DataDvlpSQL.2005CheckStoredProcedureCheckStoredProcedureSQLQuery1.sql");

__myQuery = __streamReader.ReadToEnd();
__cmd.CommandType = CommandType.Text;
__cmd.CommandText = __myQuery;
__rc = __cmd.ExecuteNonQuery();
Debug.WriteLine(__rc.ToString());
}
catch (Exception exp)
{
Debug.WriteLine(exp.ToString());
}
finally
{
if (__streamReader != null)
__streamReader.Close();
}



Qui a une idée ?

Merci d'avance

Gislain



Avatar
Romelard Fabrice [MVP]
Bonjour,

Vous avez 2 solutions différentes :
- Passer par OSQL
- http://www.asp-php.net/tutorial/sql-server/osql.php
- http://www.asp-php.net/scripts/divers/osqlgui.php

- Parser le fichier .sql .
-
http://groups.google.fr/group/microsoft.public.sqlserver.programming/browse_thread/thread/6031ea27b80812bc/15c3f83234606a9e?lnk=st&q=C%23+execute+sql+file&rnum=1&hl=fr#15c3f83234606a9e

--
Cordialement.

Romelard Fabrice [MVP]


"Gislain" a écrit dans le message de news:

Bonjour,

Je cherche désespérément à exécuter un fichier .SQL avec un
ExecuteNonQuery, mais je me heurte à un msg d'erreur SQL m'indiquant une
erreur de syntaxe près du GO (faux, ça fonctionne !!) et que CREATE/ALTER
PROCEDURE doit être la 1ere instruction dans un script !!!!

Au dessous vous avez
----------------------------------------
. Extrait du message d'erreur
. Le script à jouer
. Le code C#


Extrait du message d'erreur
----------------------------------------
{System.Data.SqlClient.SqlException: Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection)
etc...

Voici mon fichier .SQL (Je précise que le SET NOEXEC ON est voulu !!! > --------------------------------------------------------------------------------
SET NOEXEC ON
GO
DROP PROCEDURE spr_gr_test
GO
CREATE PROCEDURE spr_gr_test
as
begin
PRINT 'titi'
end
GO

Et voici mon code C#
----------------------------------------
SqlCommand __cmd = myConnection.CreateCommand();
StreamReader __streamReader = null;
string __myQuery = "";
int __rc = 0;

try
{
__streamReader = new
StreamReader(@"C:DataDvlpSQL.2005CheckStoredProcedureCheckStoredProcedureSQLQuery1.sql");

__myQuery = __streamReader.ReadToEnd();
__cmd.CommandType = CommandType.Text;
__cmd.CommandText = __myQuery;
__rc = __cmd.ExecuteNonQuery();
Debug.WriteLine(__rc.ToString());
}
catch (Exception exp)
{
Debug.WriteLine(exp.ToString());
}
finally
{
if (__streamReader != null)
__streamReader.Close();
}



Qui a une idée ?

Merci d'avance

Gislain



Avatar
Gislain
merci à tous

"Romelard Fabrice [MVP]" wrote in message
news:eVMWMD$
Bonjour,

Vous avez 2 solutions différentes :
- Passer par OSQL
- http://www.asp-php.net/tutorial/sql-server/osql.php
- http://www.asp-php.net/scripts/divers/osqlgui.php

- Parser le fichier .sql .
-
http://groups.google.fr/group/microsoft.public.sqlserver.programming/browse_thread/thread/6031ea27b80812bc/15c3f83234606a9e?lnk=st&q=C%23+execute+sql+file&rnum=1&hl=fr#15c3f83234606a9e

--
Cordialement.

Romelard Fabrice [MVP]


"Gislain" a écrit dans le message de news:

Bonjour,

Je cherche désespérément à exécuter un fichier .SQL avec un
ExecuteNonQuery, mais je me heurte à un msg d'erreur SQL m'indiquant une
erreur de syntaxe près du GO (faux, ça fonctionne !!) et que
CREATE/ALTER PROCEDURE doit être la 1ere instruction dans un script !!!!

Au dessous vous avez
----------------------------------------
. Extrait du message d'erreur
. Le script à jouer
. Le code C#


Extrait du message d'erreur
----------------------------------------
{System.Data.SqlClient.SqlException: Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
Boolean breakConnection)
etc...

Voici mon fichier .SQL (Je précise que le SET NOEXEC ON est voulu !!! >> --------------------------------------------------------------------------------
SET NOEXEC ON
GO
DROP PROCEDURE spr_gr_test
GO
CREATE PROCEDURE spr_gr_test
as
begin
PRINT 'titi'
end
GO

Et voici mon code C#
----------------------------------------
SqlCommand __cmd = myConnection.CreateCommand();
StreamReader __streamReader = null;
string __myQuery = "";
int __rc = 0;

try
{
__streamReader = new
StreamReader(@"C:DataDvlpSQL.2005CheckStoredProcedureCheckStoredProcedureSQLQuery1.sql");

__myQuery = __streamReader.ReadToEnd();
__cmd.CommandType = CommandType.Text;
__cmd.CommandText = __myQuery;
__rc = __cmd.ExecuteNonQuery();
Debug.WriteLine(__rc.ToString());
}
catch (Exception exp)
{
Debug.WriteLine(exp.ToString());
}
finally
{
if (__streamReader != null)
__streamReader.Close();
}



Qui a une idée ?

Merci d'avance

Gislain