J'utilise jquery ajax pour envoyer des valeurs à mon service web .net qui à son tour envoie ces valeurs à une procédure stockée. Le problème que j'ai est que peu importe les valeurs que j'envoie au service Web, ils sont insérés dans ma base de données comme un seul char. par exemple. "test" devient "t". Aucune des colonnes de mes tables réceptrices n'a une valeur maximale de 1. En utilisant firebug pour Firefox, j'ai confirmé que ma méthode ajax affiche effectivement les valeurs prévues pour le service Web.Pourquoi mon service Web/procédure stockée tronque-t-il mes valeurs d'insertion à un caractère?
Service Web:
[WebMethod]
public void InsertAllVehicles(string Make, string Model, string SubModel, decimal Liter, string Cylinder,string Fuel, string FuelDel, string Asp, string EngDesg)
{
using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["localConnectionString"].ConnectionString))
{
using (SqlCommand comm = new SqlCommand())
{
conn.Open();
comm.Connection = conn;
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "Vehicle_InsertAll";
if (Make.Length >=1)
comm.Parameters.AddWithValue("@Make", Make);
if (Model.Length >=1)
comm.Parameters.AddWithValue("@Model", Model);
if (SubModel.Length >=1)
comm.Parameters.AddWithValue("@SubModel", SubModel);
if (Liter != 91)
comm.Parameters.AddWithValue("@Liter", Liter);
if (Cylinder.Length >= 1)
comm.Parameters.AddWithValue("@Cylinder", Cylinder);
if (Fuel.Length >= 1)
comm.Parameters.AddWithValue("@Fuel", Fuel);
if (FuelDel.Length >= 1)
comm.Parameters.AddWithValue("@FuelDel", FuelDel);
if (Asp.Length >= 1)
comm.Parameters.AddWithValue("@Asp", Asp);
if (EngDesg.Length != 0)
comm.Parameters.AddWithValue("@EngDesg", EngDesg);
comm.ExecuteNonQuery();
conn.Close();
}
}
}
procédure stockée
ALTER PROCEDURE dbo.Vehicle_InsertAll
@Make varchar = null,
@Model varchar = null,
@SubModel varchar = null,
@Liter decimal = null,
@Cylinder varchar = null,
@Fuel varchar = null,
@FuelDel varchar = null,
@Asp varchar = null,
@EngDesg varchar = null
AS
IF @Make IS NOT NULL
BEGIN
INSERT INTO VehicleMakes (VehicleMake) VALUES(@Make)
END
IF @Model IS NOT NULL
BEGIN
INSERT INTO VehicleModels (Name) VALUES(@Model)
END
IF @SubModel IS NOT NULL
BEGIN
INSERT INTO VehicleSubModels (Name) VALUES(@SubModel)
END
IF @Liter IS NOT NULL
BEGIN
INSERT INTO VehicleLiters (Liters) VALUES(@Liter)
END
IF @Cylinder IS NOT NULL
BEGIN
INSERT INTO VehicleCylinders (Cylinders) VALUES(@Cylinder)
END
IF @Fuel IS NOT NULL
BEGIN
INSERT INTO VehicleFuel (FuelType) VALUES (@Fuel)
END
IF @FuelDel IS NOT NULL
BEGIN
INSERT INTO VehicleFuelDelivery (Delivery) VALUES (@FuelDel)
END
IF @Asp IS NOT NULL
BEGIN
INSERT INTO VehicleAspiration (Asp) VALUES (@Asp)
END
IF @EngDesg IS NOT NULL
BEGIN
INSERT INTO VehicleEngDesg (Designation) VALUES (@EngDesg)
END
RETURN
Juste pour vérifier, avez-vous vérifié que votre javascript est en train de passer une phrase complète avec charles/fiddler? Puis vérifié que les variables dans le paramètre web sont initialisées correctement avec le débogueur Visual Studio? – sclarson
J'ai découvert que la procédure stockée était le coupable quand je l'ai exécuté par lui-même en utilisant mes propres valeurs. –