我使用了参数化查询将数据保存到sql server。执行时抛出以下错误。
参数化查询'(@CustomerID int,@ SerialNo nvarchar(2),@ ModelNo nvarchar(2),@ Sal'需要未提供的参数'@CreatedBy'。
这是我的代码。
public static bool SaveSales(int custid, string model, string serial, DateTime salesdate, decimal price, string mainservice, string comments, DateTime createddate, string createdby, DateTime modifieddate, string modifiedby)
{
bool saved = false;
try
{
using (SqlConnection conn = new SqlConnection(DBManager.DBConnection))
{
conn.Open();
using (var command = conn.CreateCommand())
{
command.CommandText = "INSERT INTO tbl_Sales VALUES(@CustomerID, @SerialNo, @ModelNo, @SalesDate, @Price, @MaintanenceService, @Comments, @CreatedDate, @CreatedBy, @ModifiedDate, @ModifiedBy)";
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@CustomerID", custid);
command.Parameters.AddWithValue("@SerialNo", serial);
command.Parameters.AddWithValue("@ModelNo", model);
command.Parameters.AddWithValue("@SalesDate", salesdate);
command.Parameters.AddWithValue("@Price", price);
command.Parameters.AddWithValue("@MaintanenceService", mainservice);
command.Parameters.AddWithValue("@Comments", comments);
command.Parameters.AddWithValue("@CreatedDate", createddate);
command.Parameters.AddWithValue("@CreatedBy", createdby);
command.Parameters.AddWithValue("@ModifiedDate", modifieddate);
command.Parameters.AddWithValue("@ModifiedBy", modifiedby);
command.ExecuteNonQuery();
}
conn.Close();
}
saved = true;
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
return saved;
}
return saved;
}
我的查询出了什么问题?我使用paramerized查询是为了正确保存salesdate。任何帮助将不胜感激。
答案 0 :(得分:4)
我怀疑createdby
是null
,这意味着它不会被发送-而是必须是DBNull
。
尝试:
command.Parameters.AddWithValue("@CreatedBy", createdby ?? (object)DBNull.Value);
或者:尝试使用像Dapper这样的工具,它将:a:使其更容易使用,b:使其正确;例如:
using (SqlConnection conn = new SqlConnection(DBManager.DBConnection))
{
conn.Execute("INSERT INTO tbl_Sales VALUES(@CustomerID, @SerialNo, @ModelNo, @SalesDate, @Price, @MaintanenceService, @Comments, @CreatedDate, @CreatedBy, @ModifiedDate, @ModifiedBy)",
new {
CustomerID = custid, SerialNo = serial,
ModelNo = model, SalesDate = salesdate,
Price = price, MaintanenceService = mainservice,
Comments = comments, CreatedDate = createddate,
CreatedBy = createdby, ModifiedDate = modifieddate,
ModifiedBy = modifiedby });
}
或更简单:
using (SqlConnection conn = new SqlConnection(DBManager.DBConnection))
{
conn.Execute("INSERT INTO tbl_Sales VALUES(@custid, @serial, @model, @salesdate, @price, @mainservice, @comments, @createddate, @createdby, @modifieddate, @modifiedby )",
new {
custid, serial, model, salesdate,
price, mainservice, comments, createddate,
createdby, modifieddate, modifiedby });
}