Я пишу программу на C #, которая использует базу данных, Matches.mdf
.
Я хочу проверить существование файла базы данных, используя процедуру File.Exists
(коды появятся в конце вопроса). Если файл не существует, программа создает новую базу данных с указанным выше именем. Чтобы протестировать процедуру существования базы данных, я переименовал файл базы данных, но когда мне захотелось создать базу данных, я получил следующее сообщение об ошибке: База данных "Соответствует" уже существует, укажите другое имя .
Во втором тесте я использовал процедуру удаления базы данных перед вызовом процедуры создания. Большая ошибка. Каждый раз, когда я пытаюсь создать базу данных Matches.mdf
, я получаю следующее сообщение об ошибке:
Я уверен, что причиной этого сообщения об ошибке является я, возни с ним, потому что те же процедуры создания и удаления базы данных раньше работали нормально.
Я знаю, что могу решить проблему, изменив путь к файлу базы данных, но я хочу знать, что именно я здесь разбил, чтобы я знал в следующий раз.
Я спрашиваю: что я могу сделать, чтобы устранить вышеуказанную ошибку?
Позднее редактирование: я пытался вручную воссоздать Matches.mdf
, используя инструмент запросов из SQL Server Object Explorer из VS 2019. Работал отлично, но я не думаю, что это хорошее решение в долгосрочной перспективе.
Необходимые коды:
Объявления переменных:
static readonly string DatabaseFolder = Path.GetDirectoryName(Application.ExecutablePath) + "\\db";
readonly string DatabaseFile = DatabaseFolder + "\\Matches.mdf";
readonly string DatabaseLog = DatabaseFolder + "\\MatchesLog.ldf";
Функция, которая проверяет существование файла базы данных:
public bool DatabaseExists()
{
return File.Exists(DatabaseFile);
}
Процедура создания базы данных:
private bool CreateDatabaseFile()
{
SqlConnection MyConn = new SqlConnection(CreateDatabaseConnectionString);
string Str = "Create Database Matches on Primary (Name=Matches, Filename='@DatabaseFile') log on (Name=MatchesLog, Filename='@DatabaseLog')";
SqlCommand DatabaseCreationCommand = new SqlCommand(Str, MyConn);
DatabaseCreationCommand.Parameters.Add("@DatabaseFile", SqlDbType.Text).Value = DatabaseFile;
DatabaseCreationCommand.Parameters.Add("@DatabaseLog", SqlDbType.Text).Value = DatabaseLog;
try
{
MyConn.Open();
DatabaseCreationCommand.ExecuteNonQuery();
}
catch (SqlException S)
{
MessageBox.Show(S.Message);
return false;
}
catch (IOException I)
{
MessageBox.Show(I.Message);
return false;
}
catch (InvalidOperationException I)
{
MessageBox.Show(I.Message);
return false;
}
catch (InvalidCastException I)
{
MessageBox.Show(I.Message);
return false;
}
finally
{
MyConn.Close();
}
return true;
}
Процедура удаления базы данных:
public void DeleteDatabase()
{
string Str;
SqlConnection MyConn = new SqlConnection(CreateDatabaseConnectionString);
Str = "Alter database Matches set single_user with rollback immediate\r\ndrop database Matches";
SqlCommand command = new SqlCommand(Str, MyConn);
try
{
MyConn.Open();
command.ExecuteNonQuery();
}
catch (SqlException S)
{
MessageBox.Show(S.Message);
}
catch (IOException I)
{
MessageBox.Show(I.Message);
}
catch (InvalidOperationException I)
{
MessageBox.Show(I.Message);
}
catch (InvalidCastException I)
{
MessageBox.Show(I.Message);
}
finally
{
MyConn.Close();
}
}