1

QTY私の目標は、SKU ごとに更新することです。これを実現するためにa を使用していSqlDataAdapterます。プログラムは正常に実行されます。結果が出ないだけです。

質問: なぜ結果が出ないのですか? 私のデータベースは変更されません。

以下のコード

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

あなたの問題は次の行だと思います:

 "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 に答える
2

2 つの SQL 文字列を連結するときは、最初の文字列の末尾または 2 番目の文字列の先頭にスペースを追加することをお勧めします。Gordon Linoff が指摘したように、あなたの sql ステートメントは正しくありません。また、設定パラメータとその値は、パラメータのタイプに応じて変更する必要があります。

以下のコードを試してください。各行データを更新するためのメソッドを使用SqlCommandしていますExecuteNonQuery

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 に答える