J'essaie d'appeler une procédure stockée avec une chaîne comme paramètre (VARCHAR (MAX)
) mais encore et encore il dit à mon @args
paramètre n'est pas quand il est certainement. Ceci est ma procédure de test:@args n'est pas un paramètre pour la procédure
IF OBJECT_ID ('TEST', 'P') IS NOT NULL
DROP PROCEDURE TEST;
GO
CREATE PROCEDURE TEST (@args varchar (max)) AS
BEGIN
EXEC sp_execute_external_script
@language = N'R'
, @script = N'OutputDataSet <- as.data.frame(...);'
, @params = N'@args varchar(max)'
, @args = @args
WITH RESULT SETS ((...));
RETURN 0;
END
Si je l'appelle du studio de gestion, il fonctionne:
SET LANGUAGE ENGLISH
EXEC dbo.TEST @args = 'long string'
GO
mais pas C#
public static void Main()
{
Console.WriteLine("Connection test!");
Console.WriteLine("Press ESC to stop");
string ConnectionString = "...";
SqlConnection conn = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand("TEST");
SqlDataReader rdr = null;
string args = "very long string";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.Parameters.Add("@args", SqlDbType.VarChar, -1).Value = args;
conn.Open();
var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
try { cmd.ExecuteNonQuery(); } // @args is not a parameter for TEST Procedure
catch (SqlException ex)
Je ne suis pas réutilisent un paramètre qui est juste un varchar (max). Des idées?
Vous pouvez essayer de modifier cette ligne 'cmd.Parameters.Add (" @ args ", SqlDbType.VarChar, -1) .Value = args;' à 'cmd.Parameters.Add (" @ args ", SqlDbType. VarChar) .Value = args; ' –
Malheureusement, le même résultat. Je comprends -1 dit à C# de définir args comme un varchar (max). Quelle est la différence si je l'enlève? – Leo
Théoriquement votre code semble OK. Même avec cela, cela aurait dû marcher et vous avez raison. Peut-être que vous n'êtes pas connecté à la bonne base de données alors, sur votre solution? –