我一直在從昨天開始工作,我只是無法更新我的數據庫。 有3張桌子。這是WinForms之一的一段代碼。它加載數據和顯示,但手動更改網格後,我通過調用更新或任何事情發生任何錯誤。OleDbDataAdapter:無法更新數據庫
請幫忙,因爲我瘋了。
public partial class Form3 : Form
{
//instance fields
private export2Excel export2XLS;
private DataSet _dataSet;
private BindingSource _bsrc;
private OleDbDataAdapter _dAdapter;
private OleDbCommandBuilder _cBuilder;
private DataTable _dTable;
private void button1_Click(object sender, EventArgs e)
{
//create the connection string
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source='C:\\Documents and Settings\\dorota\\Moje dokumenty\\Visual Studio
2010\\Projects\\WindowsFormsApplication1\\WindowsFormsApplication1\\artb.mdb'";
//create the database query
string query = "SELECT * FROM Samochody";
System.Data.DataSet DtSet = new System.Data.DataSet();
_dataSet = DtSet;
//create an OleDbDataAdapter to execute the query
OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);
dAdapter.FillSchema(_dataSet, SchemaType.Source);
_dAdapter = dAdapter;
//create a command builder
OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(_dAdapter);
_cBuilder = cBuilder;
//create a DataTable to hold the query results
DataTable dTable = new DataTable();
_dTable = dTable;
//fill the DataTable
_dAdapter.Fill(_dTable);
//_dAdapter.TableMappings.Add("Samochody", "Table");
_dAdapter.Fill(_dataSet);
// --------------------- to datagridview !
//BindingSource to sync DataTable and DataGridView
BindingSource _bsrc = new BindingSource();
//set the BindingSource DataSource
//bSource.DataSource = _dTable;
_bsrc.DataSource = _dTable;
//_bsrc = bSource;
//set the DataGridView DataSource
dataGridView1.DataSource = _bsrc;
}
}
這裏...:
private void sqlsave_Click(object sender, EventArgs e)
{
//int i=_dAdapter.Update(_dTable);
_dAdapter.Update(_dataSet.Tables["Samochody"]);
//_dAdapter.Update(_dataSet,"Samochody");
}
// ---------------------------- -------------------------------------------------- ---
好的。我已經改變sqlsave方法本
private void sqlsave_Click(object sender, EventArgs e)
{
try
{
//_dAdapter.Update(_dataSet.Tables["Samochody"]);
OleDbCommand oldb= _cBuilder.GetUpdateCommand();
int i=oldb.ExecuteNonQuery();
System.Windows.Forms.MessageBox.Show(i+" rows affected.");
//_dAdapter.Update(_dataSet,"Samochody");
}catch(OleDbException oldbex){
System.Windows.Forms.MessageBox.Show(oldbex.ToString());
}
,現在我終於得到「在錯誤」
折騰不止翔實的「System.InvalidOperationException」類型 發生在System.Data未處理的異常。 dll附加信息:ExecuteNonQuery 需要一個開放且可用的Connection。連接的當前狀態 已關閉。
所以讓我改變一下,我會讓你知道如果這是它!
// --------------------------------
no。沒有。太快,不能持續。現在試圖挽救我又得到了例外, connectin被打開,但(我不能發佈圖片)當我調試這個我看到我的OleDbCommand類型的對象_commandText具有
「UPDATE Samochody SET Item =?,Data dyspozycji autem od =?,...「
等等。 我認爲這是原因。我對嗎?該怎麼辦?
您正在混合並匹配不同的方法。 ExecuteNonQuery需要一個開放的連接 - CommandBuilder不會爲你提供。您需要將Update命令放入DataAdapter並運行更新。您可能需要提供自己的更新方法。確保你的表有一個PrimaryKey索引。 – LarsTech
@LarsTech你說「把你的更新命令放入你的DataAdapter」。如果我更新我的_cBuilder,這是該類中的專用字段,並且在button1_Click命令中由_dAdapter初始化,是不是可以?連接打開。並在sqlsave_Click()我有: – 4pie0