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
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
Ich fand heraus, dass die gespeicherte Prozedur der Täter war, als ich es selbst mit meinen eigenen Werten ausgeführt habe. –