2010-11-19 2 views
0

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 
+0

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

+0

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. –

Répondre

2

Les paramètres de votre procédure stockée, en particulier ceux de type varchar doit être déclarée avec des longueurs qui correspondent à leurs colonnes défini dans le tableau. Par exemple: @Make varchar (50) = null.

+0

C'était mon problème, merci. –

1

Parce que VARCHAR est un caractère. Réglez-le à VARCHAR(MAX) jusqu'à ce que vous sachiez quelle taille vous voulez vraiment, en remplaçant MAX avec la taille dont vous avez besoin.

+0

Je viens de faire correspondre chaque paramètre avec sa colonne correspondante. –

+0

@ Nick ~ Vous ne savez pas comment les paramètres de procédure stockée fonctionnent-ils? Mon conseil est d'aller à MSDN et de lire sur eux. Vous le faites mal. – jcolebrand

1

spécifier la longueur varchar de chaque champ dans le proc stocké, par exemple @Make varchar (50) = null

+0

qui fonctionne, merci. –

Questions connexes