C#SqlParameters没有被传递给查询

时间:2012-08-26 17:31:24

标签: c# sql sql-server-2008

Sql命令构造

我已按如下方式构建了Sql命令:

    string _InsertVehicleQuery = "INSERT INTO VSI_VehicleRecords(StockNumber,Status,Make,Model,Colour,Spefication) VALUES (@StockNumber, @Status, '@Make', '@Model', '@Colour', '@Specification');";

    SqlCommand _InsertVehicleCommand = new SqlCommand(_InsertVehicleQuery);
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@StockNumber", __StockNumber));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Status", __Status));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Make", Make));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Model", Model));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Colour", Colour));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Specification", Specification));

Sql命令执行

    //Method call
    DataUtility.NonQuery(_InsertVehicleCommand);

    //Method structure
    public static void NonQuery(SqlCommand Command)
    {
        Command.Connection = __Connection;

        OpenConnection();
        Command.ExecuteNonQuery();
        CloseConnection();
    }

在SQL查询的执行或构建过程中,我没有做任何令人目眩的事情。我在数据库表中得到的结果:

VehicleRecordID StockNumber Status  Make    Model   Colour  Spefication
1                 -1            0   @Make   @Model  @Colour @Specification

提前感谢任何解决方案,也欢迎任何建议!

4 个答案:

答案 0 :(得分:4)

参数名称不应该在VALUES列表中的单引号中,因为它们将被解释为字符串文字。

答案 1 :(得分:2)

不要在参数周围加上引号 即

... (@StockNumber, @Status, @Make, @Model, @Colour, @Specification);"; 

而不是

... (@StockNumber, @Status, '@Make', '@Model', '@Colour', '@Specification');"; 

此外,您可以使用AddWithValue

_InsertVehicleCommand.Parameters.AddWithValue("@Make", Make);  

而不是

_InsertVehicleCommand.Parameters.Add(new SqlParameter("@Make", Make));  

答案 2 :(得分:1)

不要在参数附近加上“@parameter”

string _InsertVehicleQuery = "INSERT INTO VSI_VehicleRecords(StockNumber,Status,Make,Model,Colour,Spefication) VALUES (@StockNumber, @Status, @Make, @Model, @Colour, @Specification);";

    SqlCommand _InsertVehicleCommand = new SqlCommand(_InsertVehicleQuery);
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@StockNumber", __StockNumber));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Status", __Status));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Make", Make));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Model", Model));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Colour", Colour));
    _InsertVehicleCommand.Parameters.Add(new SqlParameter("@Specification", Specification));

答案 3 :(得分:0)

从参数定义中删除@字符,并引用'

然后设置每个参数addes的Value属性

new SqlParameter(“StockNumber”,__ StockNumber).Value = value;