2016-01-21 2 views
0

Im пытается конвертировать значения InnerHtml в десятичное значение. Пользователь будет вводить XPath в TextBox2Преобразование значений InnerHtml в десятичный

List<Decimal> productPriceList = new List<Decimal>(); 
var priceTags = document.DocumentNode.SelectNodes(textBox2.Text);  

Тогда я делаю цикл по каждому элементу, чтобы перебирать, хотя найдены цены и добавить их в список под названием productPriceList

foreach (var prices in priceTags) 
{ 
    label9.Visible = true; 
    label9.Text += prices.InnerHtml + "\n"; 
    productPriceList.Add(prices.InnerHtml); 
    label2.Visible = false; 
    label3.Visible = false; 
} 

Затем я добавляю значения в базе данных :

using (var con = new SqlConnection(connectionString)) 
{ 
    con.Open(); 
    using (var cmd = new SqlCommand(@"INSERT INTO OnlineProductsTemp$(CompetitorID, ProductCode, ProductName, DateCaptured) 
     VALUES(@CompetitorID, @ProductCode, @ProductName, @DateCaptured)", con)) 
    { 
     cmd.Parameters.Add("@CompetitorID", SqlDbType.Int); 
     cmd.Parameters.Add("@ProductCode", SqlDbType.VarChar); 
     cmd.Parameters.Add("@ProductName", SqlDbType.VarChar); 
     cmd.Parameters.Add("@Price", SqlDbType.Decimal); 
     cmd.Parameters.Add("@DateCaptured", SqlDbType.DateTime); 
     for (int i = 0; i < competitorList.Count; i++) 
     { 
      cmd.Parameters["@CompetitorID"].Value = competitorList[i]; 
      cmd.Parameters["@ProductCode"].Value = productCodeList[i]; 
      cmd.Parameters["@ProductName"].Value = productNameList[i]; 
      cmd.Parameters["@Price"].Value = productPriceList[i]; 
      cmd.Parameters["@DateCaptured"].Value = dateCapturedList[i]; 
      int rowsAffected = cmd.ExecuteNonQuery(); 
     } 

Все работает правильно, но я не могу найти способ правильно преобразовать значения InnerHtml в десятичный тип. Есть ли способ достичь этого?

+0

Вы пытались использовать [Decimal.Parse] (https://msdn.microsoft.com/en-us/library/system.decimal.parse (v = vs.110) .aspx)? –

+0

Я получаю сообщение об ошибке ** Указатель был за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции **, когда я добавил 'productPriceList.Add (Decimal.Parse (prices.InnerHtml));' в цикл foreach. Эта ошибка возникает при добавлении данных в базу данных, а в списке есть 0 элементов внутри них. – TeaAnyOne

+0

. Тогда ясно, что вы должны проверить, есть ли у вас что-то в этом списке, особенно когда вы перебираете другой массив/список. –

ответ

1

В зависимости от значений, которые приходят из внутренней HTML вы можете сделать что-то вроде этого

using (var con = new SqlConnection(connectionString)) 
{ 
    con.Open(); 
    using (var cmd = new SqlCommand(@"INSERT INTO  OnlineProductsTemp$(CompetitorID, ProductCode, ProductName, DateCaptured) 
    VALUES(@CompetitorID, @ProductCode, @ProductName, @DateCaptured)", con)) 
    { 
     cmd.Parameters.Add("@CompetitorID", SqlDbType.Int); 
     cmd.Parameters.Add("@ProductCode", SqlDbType.VarChar); 
     cmd.Parameters.Add("@ProductName", SqlDbType.VarChar); 
     cmd.Parameters.Add("@Price", SqlDbType.Decimal); 
     cmd.Parameters.Add("@DateCaptured", SqlDbType.DateTime); 
     for (int i = 0; i < competitorList.Count; i++) 
     { 
      cmd.Parameters["@CompetitorID"].Value = competitorList[i]; 
      cmd.Parameters["@ProductCode"].Value = productCodeList[i]; 
      cmd.Parameters["@ProductName"].Value = productNameList[i]; 
      cmd.Parameters["@Price"].Value = productPriceList[i]; 
      cmd.Parameters["@DateCaptured"].Value = dateCapturedList[i]; 
      int rowsAffected = cmd.ExecuteNonQuery(); // also the variable rowsAffected is not visible outside the scope of the for loop 
     } 
    } 
} 

Update: Вы должны, таким образом, преобразовать значения перед добавлением их в список, например, так:

foreach (var prices in priceTags) 
{ 
    label9.Visible = true; 
    label9.Text += prices.InnerHtml + "\n"; 
    productPriceList.Add(Decimal.Parse(prices.InnerHtml, <cultureInfoHere>)); 
    label2.Visible = false; 
    label3.Visible = false; 
} 

При этом вам не нужно менять тип списка.

Смежные вопросы