<?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=409966&amp;view=findpost&amp;p=3694775</guid>
        <pubDate>Tue, 22 Nov 2016 07:36:43 +0000</pubDate>
        <title>Работа с данными в таблице</title>
        <link>https://forum.sources.ru/index.php?showtopic=409966&amp;view=findpost&amp;p=3694775</link>
        <description><![CDATA[tuchin: Учусь работать с базой данных Access через ADO.NET. Попробовал поработать с помощью мастеров - не понравилось, очень много непонятного кода, если где-то будет ошибка, то мне разобраться будет трудно. Без помощи мастеров удалось связать две таблицы, теперь пытаюсь сделать добавление и удаление сразу нескольких строк в таблице:<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">Работа с данными в таблице</div><div class="code_line">Учусь работать с базой данных Access через ADO.NET. Попробовал поработать с помощью мастеров - не понравилось, очень много </div><div class="code_line">&nbsp;</div><div class="code_line">непонятного кода, если где-то будет ошибка, то мне разобраться будет трудно. Без помощи мастеров удалось связать две таблицы, </div><div class="code_line">теперь пытаюсь сделать добавление и удаление сразу нескольких строк в таблице:</div><div class="code_line">&nbsp;</div><div class="code_line">namespace ContactsTest</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public partial class Form1 : Form</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;public Form1()</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;InitializeComponent();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private OleDbConnection cn;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private DataSet ds = new DataSet();</div><div class="code_line">&nbsp;&nbsp; &nbsp;private BindingSource bsMain = new BindingSource();</div><div class="code_line">&nbsp;&nbsp; &nbsp;private BindingSource bsChild = new BindingSource();</div><div class="code_line">&nbsp;&nbsp; &nbsp;private OleDbDataAdapter daContact;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private OleDbDataAdapter daPhone;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private OleDbCommand cmd;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private void DBcon(String DBname)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cn = new OleDbConnection(&quot;Provider=Microsoft.Jet.OLEDB.4.0; Data Source=&quot; + Application.StartupPath + &quot;\\&quot; + DBname);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cn.Open();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;catch</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MessageBox.Show(&quot;Ошибка соединения с базой данных &quot; + &quot;\&quot;&quot; + DBname + &quot;\&quot;&quot;, &quot;Ошибка подключения к базе&quot;,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBoxButtons.OK, MessageBoxIcon.Error);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Application.Exit();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private void FillTables()</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;daContact = new OleDbDataAdapter(&quot;SELECT *FROM tblContact&quot;, cn);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ds.Tables.Add();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;daContact.Fill(ds.Tables[0]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;daPhone = new OleDbDataAdapter(&quot;SELECT *FROM tblPhone&quot;, cn);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ds.Tables.Add();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;daPhone.Fill(ds.Tables[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;DataRelation ContactPhoneRel = new DataRelation(&quot;RelContactPhone&quot;, ds.Tables[0].Columns[0], ds.Tables[1].Columns[1]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ds.Relations.Add(ContactPhoneRel);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;dataGridView1.DataSource = bsMain;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;dataGridView2.DataSource = bsChild;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bsMain.DataSource = ds;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bsMain.DataMember = ds.Tables[0].TableName;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bsChild.DataSource = bsMain;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;bsChild.DataMember = ds.Relations[0].RelationName;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private void daContactsIns()</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cmd = new OleDbCommand(&quot;INSERT INTO tblContact(Famil) VALUES(?)&quot;, cn);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;OleDbParameter p = new OleDbParameter(&quot;@Famil&quot;, OleDbType.Char);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p.SourceColumn = &quot;Famil&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p.SourceVersion = DataRowVersion.Original;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cmd.Parameters.Add(p);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;daContact.InsertCommand = cmd;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private void daContactsDel()</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cmd = new OleDbCommand(&quot;DELETE FROM tblContact WHERE ID = ?&quot;, cn);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;OleDbParameter p = new OleDbParameter(&quot;@ID&quot;, OleDbType.BigInt);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p.SourceColumn = &quot;ID&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;p.SourceVersion = DataRowVersion.Current;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cmd.Parameters.Add(p);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;daContact.DeleteCommand = cmd;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private void Form1_Load(object sender, EventArgs e)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DBcon(&quot;Contacts.mdb&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;FillTables();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;daContactsIns();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;daContactsDel();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; }</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private void btnSave_Click(object sender, EventArgs e)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;daContact.Update(ds.Tables[0]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;private void btnRefresh_Click(object sender, EventArgs e)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;//dataGridView1.Refresh();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ds.Tables[1].Clear();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ds.Tables[0].Clear();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ds.Relations.Clear();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FillTables();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>При добавлении или удалении нескольких строк получаю ошибку: &quot;Для элемента Update требуется действительный InsertCommand (DeleteСоmmand) при передаче коллекции DataRow с новыми (удаленными) строками&quot;. Помогите, пожалуйста, исправить ошибку. Проект прикрепил.<br>
<span class="b-attach" data-size="34181" data-hits="579" data-attach-id="50622" data-attach-post-id="3694775">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3694775&amp;attach_id=50622' title='Скачать файл' target='_blank'>ContactsForum.zip</a> (, : 579)
		</span>]]></description>
        <author>tuchin</author>
        <category>.NET: Базы данных</category>
      </item>
	
      </channel>
      </rss>
	