我目前在使用MonoDevelop的Ubuntu上使用Mono,使用與數據庫中的表匹配的DataTable運行,並且應該嘗試更新它。正在更新MySQL返回受影響的行,但實際上並未更新數據庫
以下代碼使用從XML文件加載的數據集,該文件是從另一臺機器上的Dataset.WriteXML創建的。
try
{
if(ds.Tables.Contains(s))
{
ds.Tables[s].AcceptChanges();
foreach(DataRow dr in ds.Tables[s].Rows)
dr.SetModified(); // Setting to modified so that it updates, rather than inserts, into the database
hc.Data.Database.Update(hc.Data.DataDictionary.GetTableInfo(s), ds.Tables[s]);
}
}
catch (Exception ex)
{
Log.WriteError(ex);
}
這是插入/更新到數據庫中的代碼。
public override int SQLUpdate(DataTable dt, string tableName)
{
MySqlDataAdapter da = new MySqlDataAdapter();
try
{
int rowsChanged = 0;
int tStart = Environment.TickCount;
da.SelectCommand = new MySqlCommand("SELECT * FROM " + tableName);
da.SelectCommand.Connection = connection;
MySqlCommandBuilder cb = new MySqlCommandBuilder(da);
da.UpdateCommand = cb.GetUpdateCommand();
da.DeleteCommand = cb.GetDeleteCommand();
da.InsertCommand = cb.GetInsertCommand();
da.ContinueUpdateOnError = true;
da.AcceptChangesDuringUpdate = true;
rowsChanged = da.Update(dt);
Log.WriteVerbose("Tbl={0},Rows={1},tics={2},", dt.TableName, rowsChanged, Misc.Elapsed(tStart));
return rowsChanged;
catch (Exception ex)
{
Log.WriteError("{0}", ex.Message);
return -1
}
我正在嘗試上面的代碼,而rowsChanged變爲4183,我正在編輯的行數。但是,當我使用HeidiSQL來檢查數據庫本身時,它根本不會改變任何內容。
有沒有我失蹤的一步?
編輯:或者,能夠覆蓋數據庫中的所有行也可以。這是使用USB記憶棒更新遠程計算機的設置,強制它匹配源數據表。
編輯2:添加更多代碼示例以顯示DT的來源。 DataTable在調用函數中預先填充,並且所有行都有DataRow.SetModified();應用。
編輯3:其他信息。該表正在填充來自XML文件的數據。在評論中建議嘗試修復。
編輯4:添加調用代碼,以防萬一。
謝謝你的幫助。
MySQL服務器/連接通常會設置是否返回受影響的行或匹配的行;這可能是這兩種環境的有效設置不同。 – Uueerdo
DT是什麼?它在別處填滿了嗎?它只是在代碼中出現。 – Plutonix
添加了所需的信息。 – user3169698