현재 데이터베이스의 테이블과 일치하는 DataTable을 사용하여 MonoDevelop와 함께 Mono를 우분투에서 사용하고 있으며이를 업데이트해야합니다.MySQL을 업데이트하면 영향을받는 행이 반환되지만 데이터베이스는 실제로 업데이트되지 않습니다.
다음 코드는 다른 컴퓨터의 Dataset.WriteXML에서 만든 XML 파일에서로드 된 데이터 집합을 사용합니다.
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