Я пытаюсь написать программу, которая изменит определенный GUID в таблице на GUID, указанный пользователем.Проблема в том, что когда он пытается перезаписать старый GUID новым, он выдаст мне следующую ошибку:
Невозможно добавить или изменить запись, поскольку в таблице tblEF * 1004 требуется связанная запись*
База данных состоит из 5 таблиц.Основная таблица, tblA, имеет первичный ключ, установленный в pkAccounts.Все остальные таблицы имеют внешний ключ, называемый fkAccounts.
Все отношения установлены на Enforce Referential Integrity и Cascade Delete Related Records.Если я вручную открою базу данных и отредактирую отношения, чтобы получить связанные поля каскадного обновления, моя программа обновит GUID, НО программа, в которой используется база данных, больше не будет работать.к переменным, которые отбрасывают первичный ключ в основной таблице, затем добавьте первичный ключ обратно после того, как программа закончит замену всех GUID.В этом случае я получу Синтаксическая ошибка в Alter Table
Вот мой код.Извините, если это грязно, но это одна из моих первых программ.Плюс мой первый раз возиться с вещами SQL.
try
{
string GetRI = "SELECT fkAccountGUID FROM tblR";
string GetTWI = "SELECT pkAccountGUID FROM tblTW";
string GetAI = "SELECT pkAccountGUID FROM tblA";
string GetEAI = "SELECT fkAccountGUID FROM tblEAI";
string GetEF = "SELECT fkAccountGUID FROM tblEF";
string NoPK = "ALTER TABLE tblA DROP CONSTRAINT pkAID";
string PK = "ALTER TABLE tblA ADD PRIMARY KEY (pkAID)";
DataSet ds = new DataSet();
//create a connection to the database
OleDbConnection ConnectDatabase = new OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=C:\db.mdb;" +
"Persist Security Info=True;" +
"Jet OLEDB:Database Password=123;");
//open the connection to the database
ConnectDatabase.Open();
//creates an adapter and runs the string command from the database connection
//it will then fill the information in the dataset in its own table
OleDbDataAdapter DatabaseAdapter = new OleDbDataAdapter(GetRI, ConnectDatabase);
DatabaseAdapter.Fill(ds, "tblR");
OleDbDataAdapter DatabaseAdapter1 = new OleDbDataAdapter(GetAI, ConnectDatabase);
DatabaseAdapter.Fill(ds, "tblA");
OleDbDataAdapter DatabaseAdapter2 = new OleDbDataAdapter(GetTWI, ConnectDatabase);
DatabaseAdapter.Fill(ds, "tblTW");
OleDbDataAdapter DatabaseAdapter3 = new OleDbDataAdapter(GetEAI, ConnectDatabase);
DatabaseAdapter.Fill(ds, "tblEAI");
OleDbDataAdapter DatabaseAdapter4 = new OleDbDataAdapter(GetEF, ConnectDatabase);
DatabaseAdapter.Fill(ds, "tblEF");
//get old GUID
Console.WriteLine("What is the current GUID?");
string OldGUID = Console.ReadLine();
char ap = '\x0027';
OldGUID = ap + OldGUID + ap;
//get new GUID
Console.WriteLine("What is the new GUID name?");
string NewGUID = Console.ReadLine();
NewGUID = ap + NewGUID + ap;
//test lines
//Console.WriteLine(NewGUID);
//Console.WriteLine(OldGUID);
//UPDATE string to rename the old GUID to the New GUID
string UpdateR = "UPDATE tblR SET fkAccountGUID=" + NewGUID + "WHERE fkAccountGUID=" + OldGUID;
string UpdateA = "UPDATE tblA SET pkAccountGUID=" + NewGUID + "WHERE pkAccountGUID=" + OldGUID;
string UpdateTW = "UPDATE tblTW SET pkfkAccountGUID=" + NewGUID + "WHERE pkfkAccountGUID=" + OldGUID;
string UpdateEA = "UPDATE tblTW SET fkAccountGUID=" + NewGUID + "WHERE fkAccountGUID=" + OldGUID;
string UpdateEF = "UPDATE tblEF SET fkAccountGUID=" + NewGUID + "WHERE fkAccountGUID=" + OldGUID;
//create the variables to run the string commands
OleDbCommand updatecmd0 = new OleDbCommand(UpdateF);
OleDbCommand updatecmd1 = new OleDbCommand(UpdateR);
OleDbCommand updatecmd2 = new OleDbCommand(UpdateEA);
OleDbCommand updatecmd3 = new OleDbCommand(UpdateTW);
OleDbCommand updatecmd4 = new OleDbCommand(UpdateA);
OleDbCommand nocheckcmd = new OleDbCommand(NoPK);
OleDbCommand checkcmd = new OleDbCommand(PK);
//have the commands connect to the database
nocheckcmd.Connection = ConnectDatabase;
updatecmd0.Connection = ConnectDatabase;
updatecmd1.Connection = ConnectDatabase;
updatecmd2.Connection = ConnectDatabase;
updatecmd3.Connection = ConnectDatabase;
updatecmd4.Connection = ConnectDatabase;
checkcmd.Connection = ConnectDatabase;
//Run the commands
nocheckcmd.ExecuteNonQuery();
updatecmd0.ExecuteNonQuery();
updatecmd1.ExecuteNonQuery();
updatecmd2.ExecuteNonQuery();
updatecmd3.ExecuteNonQuery();
updatecmd4.ExecuteNonQuery();
checkcmd.ExecuteNonQuery();
//Dispose the adapter and close the connection to the database.
DatabaseAdapter.Dispose();
ConnectDatabase.Close();
//console will display the string if everything completed
Console.WriteLine("Success. Press any key to exit.");
Console.Read();
}
catch (OleDbException Error)
{
//when an error occurs display the error in the console
Console.WriteLine(Error.Message);
Console.Read();
}
По сути, как мне отредактировать поля GUID среди 5 баз данных, не открывая вручную проверку Каскадного обновления, запустив мою программу, затем снова открыв базуи снятие галочки с Каскадного обновления?