Получить значение из CSV-файла и заменить его в базе данных в C # - PullRequest
0 голосов
/ 06 апреля 2011

Я создаю приложение, которое считывает CSV-файл в представление сетки данных в C #. Файл состоит из таких данных, как номер позиции и запас.

Если номер позиции совпадает, необходимо добавить его запас, а затем заменить существующий запас в базе данных тем же номером.

Я могу добавить запас из csv-файла в базу данных с теми же номерами товаров в базе данных, но не могу заменить запас.

Вот мой код:

    string sql_select = "select count(*) from PRODUCTS where item_no= '" + 
                            itemNo + "'";
    SqlCommand cmdCheckPmk = new SqlCommand(sql_select, Class1.conn);

    int selectItemNo = Convert.ToInt32(cmdCheckPmk.ExecuteScalar());

    if (selectItemNo != 0)
    {
        string sql_update = "update PRODUCTS set item_stock=+'" + Stock + 
                            "' where item_no= '" + itemNo + "'";
        SqlCommand cmd1 = new SqlCommand(sql_update, Class1.conn);
    }
    else
    {
        SqlCommand cmd11 = new SqlCommand("insert into PRODUCTS(item_no,item_name,price,cost,item_stock,dept_id,tax_rate1,tax_rate2,bulk_price,bulk_qty) values ('" + itemNo + "','" + itemName + "'," + price + "," + cost + "," + Stock + ",'" + dept + "','" + tax1 + "','" + tax2 + "'," + BulkPrize +"," + BulkQty +") ", Class1.conn);
        cmd11.ExecuteNonQuery();
    }

Я использую SQL Server 2008 R2.

1 Ответ

0 голосов
/ 06 апреля 2011

В вашем примере выше было много небольших проблем.

Изучите приведенный ниже базовый пример как лучший подход.

// Pass in your SQL Connection object so you do not have to worry about
// multiple open connections
public int jp2Test(SqlConnection conn) {
  // Verify someone did not pass in a NULL object
  if (conn != null) {
    string sql_text = "select count(*) from PRODUCTS where item_no=@item_no";
    using (SqlCommand cmd = new SqlCommand(sql_text, conn)) {
      // Get in the habit of using Parameters. If you know the SqlDbType, use one of
      // the Parameter overloads that provides for this.
      cmd.Parameters.AddWithValue("@item_no", itemNo);
      // Open the connection if it is not already
      if ((cmd.Connection.State & ConnectionState.Open) != ConnectionState.Open) {
        cmd.Connection.Open();
      }
      // initialize an item_number variable
      int selectedItemNo = -1;
      object value = cmd.ExecuteScalar();
      // Check for both NULL and DBNull
      if ((value != null) && (value != DBNull.Value)) {
        selectedItemNo = Convert.ToInt32(value);
      }
      // Update your SQL Text based on the value you received.
      if (0 < selectedItemNo) {
        sql_text = "update PRODUCTS set item_stock=@item_stock where item_no=@item_no";
        // this value is already included
        // cmd.Parameters.AddWithValue("@item_no", itemNo);
        // this is a common value that will be added after the conditional
        // cmd.Parameters.AddWithValue("@item_stock", Stock);
      } else {
        sql_text = "insert into PRODUCTS" +
          " (item_no, item_name, price, cost, item_stock, dept_id, tax_rate1, tax_rate2, bulk_price, bulk_qty)" +
          " values " +
          "(@item_no,@item_name,@price,@cost,@item_stock,@dept_id,@tax_rate1,@tax_rate2,@bulk_price,@bulk_qty)";
        // this value is already included
        // cmd.Parameters.AddWithValue("@item_no", itemNo);
        cmd.Parameters.AddWithValue("@item_name", itemName);
        cmd.Parameters.AddWithValue("@price", price);
        cmd.Parameters.AddWithValue("@cost", cost);
        // this is a common value that will be added after the conditional
        // cmd.Parameters.AddWithValue("@item_stock", Stock);
        cmd.Parameters.AddWithValue("@dept_id", dept);
        cmd.Parameters.AddWithValue("@tax_rate1", tax1);
        cmd.Parameters.AddWithValue("@tax_rate2", tax2);
        cmd.Parameters.AddWithValue("@bulk_price", BulkPrize);
        cmd.Parameters.AddWithValue("@bulk_qty", BulkQty);
      }
      cmd.CommandText = sql_text;
      cmd.Parameters.AddWithValue("@item_stock", Stock);
      // Return the number of SQL records that were affected.
      return cmd.ExecuteNonQuery();
    }
  }
  // return -1 on Error
  return -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...