使用 C# 中的 DbParameter 将数据插入 SQL 服务器

Insert data into SQL Server with a DbParameter in C#

当我尝试将值插入 SQL Server 2008 R2 时,出现错误 [语法错误':']

这是我定义的模型class:

public class Company
{
    [DBField("ID"), DBParameter(":ID")]
    public double ID { get; set; }

    [DBField("CCODE"), DBParameter(":CCODE")]
    public string CompanyCode { get; set; }

    [DBField("CNAME"), DBParameter(":CNAME")]
    public string CompanyName { get; set; }
}

这是我的查询

string sql = @"INSERT INTO TESTDB.SMSGATEWAY_COMPANY(ID,CCODE,CNAME) VALUES (:ID, :CCODE, :CNAME)";

使用存储过程方法赋值后,使用以下执行方法。

public override void ExecuteStiredProcedure(string procedureName, List<StoredProcedureInputParameters> paraList)
{  
    using (SqlCommand sqCommand = new SqlCommand())
    {
        sqCommand.Connection = base.DBConnection;
        sqCommand.Connection.Open();
        sqCommand.CommandType = CommandType.Text;
        sqCommand.CommandText = procedureName;

        foreach (StoredProcedureInputParameters p in paraList)
        {
            oracleCommand.Parameters.AddWithValue(p.ParamenterName, p.Value);
        }               

        sqCommand.ExecuteNonQuery();
        sqCommand.Connection.Close();
        sqCommand.Parameters.Clear();
    }         
}

执行查询时,出现错误[语法错误':']

请给出解决方案

如错误消息所示,冒号未被识别为有效语法。 TSQL 使用@符号作为变量前缀。

尝试使用查询:

INSERT INTO TESTDB.SMSGATEWAY_COMPANY(ID,CCODE,CNAME) VALUES (@ID, @CCODE, @CNAME)

.. 并确保 StoredProcedureInputParameters 中的参数名称还包含“@”符号作为前缀,而不是冒号。见 example in msdN.