语法错误不正确 - c#

时间:2015-03-18 10:10:55

标签: c# sql sql-server

我收到错误

  

'('

附近的语法不正确

我在输入特定产品代码时从数据库更新产品。

如何做到这一点?

// 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'
}

2 个答案:

答案 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。