2016-08-08 2 views
0

У меня есть DataTable с этой структурой:Заполните столбец в DataTable с выходом из SQL запроса

number amount destroyed together 
    1  19   3   22 
    2  20   3   23 
    3  11   0   11 

Значение в столбце destroyed вручную вставляется пользователем. Тем не менее, я создал таблицу в SQL, где пользователь может добавить значение для destroyed, и я хочу принять значение из этой таблицы. Для этого у меня уже есть правильный SQL-запрос.

Следующий пример продемонстрирует.

Вот выход из запроса:

number destroyed  type 
    1   3 papper 
    2   1 papper 

По структуре DataTable он должен вставить значение destroyed из этого SQL запроса в DataTable, когда

Query.number = DataTable.Number 

Итак, в соответствии с этим Например, это должно выглядеть так:

number amount destroyed together 
    1  19   3   22 
    2  20   1   21 
    3  11   0   11 

Как сделать Я это делаю?

+0

вы пробовали что-то, что не удалось или вы просите для ADO.NET учебник о том, как использовать DataTables? –

+0

Я сделал что-то вроде этого: я установил этот SQL-запрос как DataTable2, а затем нашел числа в DataTable2 и скопировал из DataTable.destroyed в DataTable.destroyed, когда DataTable2.number = DataTable.number, но я не думаю, что это хорошо патент. – JustSomeNewbie

ответ

1

Вы не опубликовали, как вы подключаете и выполняете инструкцию SQL. Использование SqlConnection и друзей, чтобы выполнить инструкцию:

// For each row in the DataTable... 
for (int i = 0; i < dataTable.Rows.Count; i++) { 
    // Get record where number equals the DataTable's "number" column for this row 
    // Then select the destroyed value: 
    string sql = String.Format("SELECT * FROM Table WHERE number='{0}' THEN destroyed", dataTable.Rows[i]["number"].ToString()); 
    int destroyedCount = 0; 

    // Execute the SQL query, return value to `destroyedCount` 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     SqlCommand cmd = new SqlCommand(sql); 
     try 
     { 
      conn.Open(); 
      destroyedCount = (int)cmd.ExecuteScalar(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 

    // Set the table value to the SQL command's returned value 
    dataTable.Rows[i]["destroyed"] = destroyedCount; 

    // Assuming you want amount + destroyed = together 
    int amountCount = 0; 

    // Parse the table's current value for `amount` 
    try 
    { 
     amountCount = (int)dataTable.Rows[i]["amount"]; 
    } 
    catch (ArgumentNullException argEx) 
    { 
     // Handle exception 
    } 
    catch (FormatException formatEx) 
    { 
     // Handle exception 
    } 

    // Set the `together` column to `amount` + `destroyed` 
    dataTable.Rows[i]["together"] = (amountCount + destroyedCount).ToString(); 
} 
+0

Синхронизация с INT не работает. Im использует SqlConnection. – JustSomeNewbie

+0

Какое исключение вы получаете, и можете ли вы попытаться разобрать его на строку ('Console.WriteLine ((string) cmd.ExecuteScalar());'), чтобы узнать, какое значение дает команда SQL? –

+0

Я не получаю никакого исключения. У меня уже проблемы при записи. Ошибка: невозможно преобразовать из объекта в строку – JustSomeNewbie

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