почему мой веб-сервис / хранимая процедура усекает мои вставные значения до одного символа? - PullRequest
0 голосов
/ 19 ноября 2010

Я использую jquery ajax для отправки значений в мой веб-сервис .net, который, в свою очередь, отправляет эти значения в хранимую процедуру. У меня проблема в том, что независимо от того, какие значения я отправляю в веб-сервис, они вставляются в мою БД как один символ. например «test» становится «t».

Ни в одном из моих столбцов принимающих таблиц не установлено максимальное значение 1. Использование firebug для Firefox Я подтвердил, что мой метод ajax действительно отправляет предполагаемые значения в веб-службу.

Веб-сервис:

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

            }
        }

    }

Хранимая процедура

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

Ответы [ 3 ]

2 голосов
/ 19 ноября 2010

Параметры вашей хранимой процедуры, особенно с типом varchar, должны быть объявлены с длинами, соответствующими их столбцам, определенным в таблице.Например: @Make varchar (50) = null.

1 голос
/ 19 ноября 2010

укажите длину varchar каждого поля в вашем сохраненном процессе, например, @Make varchar (50) = null

1 голос
/ 19 ноября 2010

Потому что VARCHAR это один символ. Установите его на VARCHAR(MAX), пока не узнаете, какой размер вам действительно нужен, заменив MAX на нужный вам размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...