1

我的目标是更新QTY每个 SKU。我正在使用 aSqlDataAdapter来完成此操作。程序运行良好。只是没有结果发生。

问题:为什么没有结果发生?我的数据库保持不变。

下面的代码

public static void updateInventoryfromAMZ(DataTable datatable)
{
        int index = 0;
        string connString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString();
        DataSet amzInventoryDataSet = new DataSet("AMZINVDATASET");
        amzInventoryDataSet.Tables.Add(datatable);

        // FOR EACH ROW - PERFORM AN UPDATE //
        using (SqlConnection connection = new SqlConnection(connString))
        {
            SqlDataAdapter adapter = new SqlDataAdapter();

            foreach (DataRow row in amzInventoryDataSet.Tables[index].Rows)
            {
                string sku = datatable.Rows[index]["seller-sku"].ToString();
                string qty = datatable.Rows[index]["quantity"].ToString();
                // Create the UpdateCommand.
                SqlCommand command = new SqlCommand(
                     "UPDATE Inventory SET qty = @qty" +
                     "WHERE sku = @sku", connection);
                // Add the parameters for the UpdateCommand.
                command.Parameters.Add("@qty", SqlDbType.Int, qty.Length, qty);
                command.Parameters.Add("@sku", SqlDbType.VarChar, sku.Length, sku);
                adapter.UpdateCommand = command;
                adapter.Update(amzInventoryDataSet.Tables[index]);     
                index++;
            }
        }
    }
4

2 回答 2

2

连接两个 sql 字符串时,最好在第一个字符串的末尾或第二个字符串的开头添加空格。正如 Gordon Linoff 指出的那样,您的 sql 语句不正确。并且设置参数和值需要根据参数的类型而改变。

试试下面的代码,我有使用SqlCommandExecuteNonQuery方法来更新每一行数据

using (SqlConnection connection = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand("UPDATE Inventory SET qty = @qty WHERE sku = @sku", connection))
{
    connection.Open();
    var paramqty=  cmd.Parameters.Add("@qty", SqlDbType.Int);
    var parasku = cmd.Parameters.Add("@sku", SqlDbType.VarChar);
    foreach (DataRow row in amzInventoryDataSet.Tables[0].Rows)
    {
        parasku.Value = row["seller-sku"].ToString();
        paramqty.Value = int.Parse(row["quantity"].ToString());
        cmd.ExecuteNonQuery();
    }
}
于 2013-09-04T03:35:11.760 回答
2

我认为您的问题是以下几行:

 "UPDATE Inventory SET qty = @qty" +
 "WHERE sku = @sku", connection);

他们将产生一个字符串,如:

 "UPDATE Inventory SET qty = @qtyWHERE sku = @sku", connection);

@qtyWHERE并且没有定义变量。

试试这个:

 "UPDATE Inventory SET qty = @qty WHERE sku = @sku", connection);
于 2013-09-04T03:05:05.727 回答