Pourquoi cela lève-t-il une exception

la programmation


Dans SQL Server, j’ai créé cette sproc :

SQL
CREATE PROCEDURE [dbo].[GetOutletInfo] 
@PermitID int
AS SELECT * FROM Outlets WHERE PermitID=@PermitID
GO

puis dans mon code C#, je lance ceci :

C#
var cn = new SqlConnection(connectionString);
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter("GetOutletInfo", cn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add("@PermitID", SqlDbType.Int).Value = PermitID;
da.Fill(ds, "GetOutletInfo");

Lors de l’exécution, da.Fill lève cette exception :

Système.FormatException
HRésult=0x80131537
Message=Échec de la conversion de la valeur du paramètre d’une chaîne en un Int32.
Source=System.Data.SqlClient

J’ai cherché sur Google et me suis gratté la tête pendant des heures en essayant différentes choses, sans succès. Tous les conseils ou idées seront appréciés. Merci

Ce que j’ai essayé :

This query works (since it does not need a parameter)
SqlDataAdapter da;
DataSet ds = new DataSet();
da = new SqlDataAdapter("GetInspectionLettersQueue", cn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.Fill(ds, "GetInspectionLettersQueue");

J’ai essayé de convertir le paramètre en int32 avant de l’ajouter à la commande Parameters.Add, ce qui n’a pas fonctionné.

Solution 1

Eh bien, je suppose que j’ai besoin de plus de café. Il s’est avéré que PermitID était une chaîne, mais qu’il était défini sur “foo” – duh – pas étonnant – merci d’avoir regardé une fois que je l’ai défini sur “42”, cela a fonctionné.

je ne me sens pas trop

Solution 2

Si je me souviens de mon SQL, les types de paramètres doivent tous être des chaînes et non des entiers. Essayez ça.

コメント

タイトルとURLをコピーしました