我收到错误
'('
附近的语法不正确
我在输入特定产品代码时从数据库更新产品。
如何做到这一点?
// Update product with supplier code entered
DialogResult dr = MessageBox.Show("Are you sure you want to update this product?", "Update Product Details", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
try
{
using (SqlConnection SQLcon = new SqlConnection("Data Source = .\\SqlExpress;" + "Initial Catalog=NCAShop;" + "Integrated Security=True;"))
{
SQLcon.Open();
using (SqlCommand addProduct = new SqlCommand("UPDATE dbo.[NCAProduct] (ProductName, SupplierCode, Cost, RetailPrice, Quantity, BestBefore) VALUES ('" + txtUPProductName.Text + "', " + txtUPSupplierCode.Text + ", " + txtUPCost.Text + ", " + txtUPRetail.Text + ", " + txtUPQuantity.Text + ", @date) WHERE ProductCode = " + txtUPProdCode.Text, SQLcon))
{
addProduct.Parameters.Add("@date", SqlDbType.DateTime).Value = bestBeforeDTP.Value.Date;
addProduct.ExecuteNonQuery();
}
}
MessageBox.Show("This product has been successfully added to the database!");
}
catch (Exception error2)
{
MessageBox.Show(error2.ToString());
}
}
else if (dr == DialogResult.No)
{
// Program will continue if user selects 'No'
}
答案 0 :(得分:4)
您需要使用更正SQL更新的语法。语法是:
UPDATE table SET column = value, ... WHERE ...
您将其与INSERT
语法(
INSERT INTO Table (Column, ...) VALUES (Value, ...)
我想你实际上想要做INSERT
。在这种情况下,请将查询中的UPDATE
替换为INSERT INTO
,您应该没问题。
PS:哦,请 - 使用所有值的参数,而不仅仅是日期。
答案 1 :(得分:0)
有时使用正确的查询格式“[]”这些括号在数据库中执行查询时会产生错误,请对特定数据库类型使用正确的转换。为防止sqlinjection attacks我为每个用户提供的输入使用了SqlCommandParameter。您可以使用下面给出的查询:
string query = @"UPDATE dbo.[NCAProduct] (
[ProductName],
[SupplierCode],
[Cost],
[RetailPrice],
[Quantity],
[BestBefore]) VALUES
(@txtUPProductName,
@txtUPSupplierCode,
@txtUPCost,
@txtUPRetail,
@txtUPQuantity,
@date)
WHERE [ProductCode] = @txtUPProdCode";
using (SqlCommand addProduct = new SqlCommand(query, SQLcon))
{
addProduct.Parameters.AddWithValue("@date", SqlDbType.DateTime).Value = bestBeforeDTP.Value.Date;
addProduct.Parameters.AddWithValue("@txtUPProductName", txtUPProductName.Text);
addProduct.Parameters.AddWithValue("@txtUPSupplierCode", Convert.ToInt32(txtUPSupplierCode.Text));
addProduct.Parameters.AddWithValue("@txtUPCost", Convert.ToInt32(txtUPCost.Text));
addProduct.Parameters.AddWithValue("@txtUPRetail", Convert.ToInt32(txtUPRetail.Text));
addProduct.Parameters.AddWithValue("@txtUPQuantity", Convert.ToInt32(txtUPQuantity.Text));
addProduct.Parameters.AddWithValue("@txtUPProdCode", Convert.ToInt32(txtUPProdCode.Text));
addProduct.ExecuteNonQuery();
}
如果在数据库中使用bigint数据类型,则将文本转换为int64或double。