2010-11-19 1 views
0

Ich benutze jquery ajax, um Werte an meinen .net Webdienst zu senden, der diese Werte wiederum an eine gespeicherte Prozedur sendet. Das Problem, das ich habe, ist, dass egal, welche Werte ich an den Webdienst sende, sie in meine DB als ein Zeichen eingefügt werden. z.B. "Test" wird zu "t".Warum schneidet mein Webdienst/meine gespeicherte Prozedur meine Einfügewerte auf ein Zeichen ab?

Keine meiner empfangenden Tabellen Spalten haben einen maximalen Wert von 1. Mit Firebug für Firefox habe ich bestätigt, dass meine Ajax-Methode tatsächlich die beabsichtigten Werte auf den Web-Service posten.

Web Service:

[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(); 

      } 
     } 

    } 

Stored Procedure

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

Nur zu überprüfen, haben Sie vollständig verifiziert, dass Ihr Javascript in einem vollständigen Satz mit Charles/Fiddler übergeben wird? Dann überprüft, dass die Variablen im Web-Parameter ordnungsgemäß mit dem Visual Studio Debugger initialisiert werden? – sclarson

+0

Ich fand heraus, dass die gespeicherte Prozedur der Täter war, als ich es selbst mit meinen eigenen Werten ausgeführt habe. –

Antwort

2

die Parameter Ihrer gespeicherten Prozedur, insbesondere solche mit Typ VARCHAR sollte mit Längen erklärt werden, die ihre Spalten übereinstimmen definiert in der Tabelle. Zum Beispiel: @Make varchar (50) = null.

+0

Das war mein Problem, danke. –

1

Da VARCHAR ein Zeichen ist. Setzen Sie es auf VARCHAR(MAX), bis Sie wissen, welche Größe Sie wirklich wollen, und ersetzen MAX mit der Größe, die Sie benötigen.

+0

Ich habe einfach jeden Parameter mit der entsprechenden Spalte abgeglichen. –

+0

@Nick ~ Sie wissen nicht, wie gespeicherte Prozedurparameter funktionieren? Mein Rat ist, zu MSDN zu gehen und sie zu lesen. Du machst es falsch. – jcolebrand

1

geben die VARCHAR Länge jedes Feld in der gespeicherten proc, zB @Make VARCHAR (50) = null

+0

das funktioniert, danke. –

Verwandte Themen