<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419407&amp;view=findpost&amp;p=3839535</guid>
        <pubDate>Sat, 26 Sep 2020 15:57:22 +0000</pubDate>
        <title>Вопросы про SQLite+DataGridView</title>
        <link>https://forum.sources.ru/index.php?showtopic=419407&amp;view=findpost&amp;p=3839535</link>
        <description><![CDATA[hd44780: Тема неактульна.<br><br>От SQLite отказался по причине того, что Datetime у него, мягко говоря, странный. Из-за этого возникали какие-то странные баги с условиями на дату, были сложности с использованием DateTime контрола внутри DataGridView и т.д.<br>Где-то даже читал, что нативно в SQLite есть только 3 типа данных - int, float/double и string. Всё остальное - какие-то ассоциированные типы. Как по мне - просто плохо сработанные костыли имхо. Даже встроенные функции работы с датой/временем со столбцами не работают, только с какими-то константами. Нафига они тогда? Калькулятор для даты/времены писать только ...<br><br>Может я чего не понял, но переделал на MySQL - все баги и приколы как корова языком.<br><br>С кастомными запросами (уже на MySQL) разобрался, всё пашет шикарно.<br><br>Осталась некая кривизна с Combobox column в DataGridView, событие SelectedIndexChanged иногда приводит к побочным эффектам, но это удалось обойти другим событием.]]></description>
        <author>hd44780</author>
        <category>.NET: Базы данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=419407&amp;view=findpost&amp;p=3837421</guid>
        <pubDate>Fri, 21 Aug 2020 17:29:16 +0000</pubDate>
        <title>Вопросы про SQLite+DataGridView</title>
        <link>https://forum.sources.ru/index.php?showtopic=419407&amp;view=findpost&amp;p=3837421</link>
        <description><![CDATA[hd44780: Привет всем.<br>
Есть ряд вопросов по этой связке.<br>
<br>
БД простая, как 3 копейки - 3 таблицы:<br>
1. Клиенты - серийный номер изделия, имя клиента, телефон и т.п. чепуха<br>
2. Ремонты - дата ремонта, тип ремонта (id ремонта из справочника), ФИО мастера, стоимость ремонта<br>
3. Справочник типа ремонта - название вида работы, цена.<br>
<br>
В каждой таблице есть id - primary key, в таблице ремонтов также есть id_client - foreign key - ссылка на таблицу клиентов.<br>
Типовая структура для таких задачек.<br>
<br>
Приложение C#, WinForms, NET4.0. Заказчику всё равно, а WPF я чего-то не понимаю, возможно плохо изучил, не пошло оно мне.<br>
Содержимое таблиц показываю в 2-х разных формах - клиенты и ремонты. 3-я форма - редактирование справочника, ничего интересного.<br>
Вся эта кухня уже крутится, работает нормально. Но есть одна странность.<br>
<br>
В таблице ремонтов поле тип ремонта - столбец Combobox, работу с ним взял отсюда - <a class='tag-url' href='https://khanrahim.wordpress.com/2010/04/13/combobox-with-datagridview-in-c/' target='_blank'>https://khanrahim.wordpress.com/2010/04/13/...agridview-in-c/</a><br>
Но если я поменяю в каком-то ремонте тип (просто выбираю другое значение их списка) событие CellValueChanged приходит, там я разблокирую кнопку &quot;Сохранить&quot;. Но она ничего не сохраняет. Но если изменить в этой же строке ещё что-то, например, имя мастера, то всё сохраняется - и новое значение списка и фамилия.<br>
Кнопка сохранить делает по сути repairs_adapter.Update(repairs_dt); -- как во всех букварях.<br>
<br>
Сильно подозреваю, что дело в командах InsertCommand, UpdateCommand. Там по сути <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string s_query = string.Format(@&quot;SELECT * FROM repairs WHERE repairs.id_client = {0}&quot;, id_client_for_repair);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string s_query = string.Format(@&quot;SELECT repairs.date, repairs.id_repair_type, repairs.repair_note, repairs.master_fio, repairs.summa </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM repairs WHERE repairs.id_client = {0}&quot;, id_client);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repairs_adapter = new SQLiteDataAdapter(s_query, m_dbConn);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SQLiteCommandBuilder cb = new SQLiteCommandBuilder(repairs_adapter);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repairs_adapter.UpdateCommand = cb.GetUpdateCommand();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repairs_adapter.InsertCommand = cb.GetInsertCommand();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;repairs_adapter.DeleteCommand = cb.GetDeleteCommand();</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Я смотрел, что пишется, например, в UpdateCommand:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&quot;UPDATE [main].[sqlite_default_schema].[repairs] SET [id_client] = @param1, [date] = @param2, [id_repair_type] = @param3, [repair_note] = @param4, [master_fio] = @param5, [summa] = @param6 WHERE (([id_repair] = @param7) AND ([id_client] = @param8) AND ([date] = @param9) AND ([id_repair_type] = @param10) AND ((@param11 = 1 AND [repair_note] IS NULL) OR ([repair_note] = @param12)) AND ([master_fio] = @param13) AND ((@param14 = 1 AND [summa] IS NULL) OR ([summa] = @param15)))&quot;</div></ol></div></div></div></div><br>
<br>
Как понять, что оно передаёт по факту в эти @paramXX?<br>
id_repair - это primary key, т.е. все остальные условия в WHERE нафиг никому не нужны. Но как дать ему это понять? Я видел примеры ручного задания этих команд, но все они были какими-то огрызками непонятно от чего.<br>
<br>
на id_client база вообще ругалась, вынужден был загнать костыль<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;foreach (DataGridViewRow row in dataGridViewRepairs.Rows)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;row.Cells[1].Value = id_client_for_repair.ToString();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} // foreach</div></ol></div></div></div></div><br>
перед repairs_adapter.Update(repairs_dt);<br>
<br>
Есть ли где-то какие-то внятные примеры, как всё это делать?<br>
Примеры по SQL Server - туфта полная, там все эти InsertCommand никто никогда не заполняет, работает и так. С SQLite - надо заполнять.<br>
<br>
Спасибо.]]></description>
        <author>hd44780</author>
        <category>.NET: Базы данных</category>
      </item>
	
      </channel>
      </rss>
	