2014-12-05 226 views
0

我在這裏遇到問題,我有一個查詢到數據庫,我只選擇一個表,將它加載到dataSet中並填充DataGridView。從DataGridView更新數據時出錯

comm = new SqlCommand("Select * from measurement where [email protected] order by me_date DESC", conn); 
comm.Parameters.AddWithValue("@id", this.uId); 
daPomiar = new SqlDataAdapter(); 
daPomiar.SelectCommand = comm; 
daPomiar.Fill(dsPomiar, "Pomiary"); 
dataGridView2.DataSource = dsPomiar; 
dataGridView2.DataMember = "Pomiary"; 

添加到此

SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daPomiar); 

然而,當我嘗試使用BindingNavigotor更新數據:

private void toolStripButton1_Click(object sender, EventArgs e) 
{ 
    SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daPomiar); 
    daPomiar.Update(dsPomiar, "Pomiary"); 
} 

則有時工作,有時它給了我一個錯誤:

Dynamic SQL generation is not supported against multiple base tables.

M問題是,爲什麼會發生。我正在一張桌子上工作,所以我可以使用SqlCommandBuilder(我認爲)。那麼,錯誤是不規則的 - 有時會出現錯誤,有時它會起作用 - 數據在表中更新。

+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-12-05 17:53:58

回答

0

您的查詢告訴我,您正在從measurement表中選擇數據。我相信你正試圖更新到Pomiary表。雖然您提供的是DataMember等,但我相信最好的做法是讓DataMember和表名保持一致。

此外,請確保您的連接是開放的,我沒有看到任何東西,可能被排除在外。

string tableName = "measurement"; 
comm = new SqlCommand("Select * from measurement where [email protected] order by me_date DESC", conn); 
comm.Parameters.AddWithValue("@id", this.uId); //not sure what this does 
daPomiar = new SqlDataAdapter(comm, tableName); 
daPomiar.Fill(dsPomiar, tableName); 
dataGridView2.DataSource = dsPomiar; 

工具條:

private void toolStripButton1_Click(object sender, EventArgs e) 
{ 
    SqlCommandBuilder cmdBldr = new SqlCommandBuilder(daPomiar); 
    daPomiar.Update(dsPomiar, tablename); 
}