C# 为什么我的web服务/存储过程将插入值截断为一个字符?
我使用jQueryAjax将值发送到我的.NETWeb服务,该服务将这些值发送到存储过程。我遇到的问题是,无论我向web服务发送什么值,它们都会作为一个字符插入到我的数据库中。e、 g.“测试”变为“t” 我的接收表中没有一列的最大值集为1。使用Firefox的firebug,我已经确认我的ajax方法确实在向web服务发布预期的值 网络服务:C# 为什么我的web服务/存储过程将插入值截断为一个字符?,c#,web-services,stored-procedures,C#,Web Services,Stored Procedures,我使用jQueryAjax将值发送到我的.NETWeb服务,该服务将这些值发送到存储过程。我遇到的问题是,无论我向web服务发送什么值,它们都会作为一个字符插入到我的数据库中。e、 g.“测试”变为“t” 我的接收表中没有一列的最大值集为1。使用Firefox的firebug,我已经确认我的ajax方法确实在向web服务发布预期的值 网络服务: [WebMethod] public void InsertAllVehicles(string Make, string Model, st
[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
因为
VARCHAR
是一个字符。将其设置为VARCHAR(MAX)
直到您知道真正需要的大小,用所需的大小替换MAX。因为VARCHAR
是一个字符。将其设置为VARCHAR(MAX)
直到您知道您真正想要的大小,用您需要的大小替换MAX。指定存储过程中每个字段的VARCHAR长度,例如@Make VARCHAR(50)=null指定存储过程中每个字段的VARCHAR长度,例如@Make VARCHAR(50)=null存储过程的参数,特别是具有varchar类型的参数,应该使用与表中定义的列相匹配的长度来声明。例如:@Make varchar(50)=null。您的存储过程的参数,特别是具有varchar类型的参数,应该使用与表中定义的列相匹配的长度来声明。例如:@Make varchar(50)=null。为了验证,您是否完全验证了您的javascript正在与charles/fiddler传递完整的句子?然后检查web参数中的变量是否使用visual studio调试器正确初始化?当我使用自己的值自行执行存储过程时,我发现存储过程是罪魁祸首。为了验证,您是否完全验证了您的javascript是否与charles/fiddler传递了完整的语句?然后检查web参数中的变量是否已使用visual studio调试器正确初始化?当我使用自己的值自行执行时,我发现存储过程是罪魁祸首。我只是将每个参数与其对应的列进行了匹配。@Nick~你不知道存储过程参数是如何工作的,是吗?我的建议是转到MSDN并仔细阅读它们。你做错了。我只是将每个参数与其对应的列进行了匹配。@Nick~你不知道存储过程参数是如何工作的,是吗?我的建议是转到MSDN并仔细阅读它们。你做错了。