EngAb1989 Ответов: 1

Резервное копирование локальной базы данных с помощью C#


Я попытался создать резервную копию локальной базы данных (*.mdf), но у меня нет никаких шансов. С дубляжем я привязался к дэйлсу.

System.Data.SqlClient.SqlException
  HResult=0x80131904
  Message=An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.
Incorrect syntax near 'C:\Users\EngAb\OneDrive\EmguCV\Dataase-2019-12-11--23-11-12.bak'.
  Source=.Net SqlClient Data Provider
  StackTrace:
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at FinalDesignMathSoftware.Form3.button2_Click(Object sender, EventArgs e) in C:\Users\EngAb\source\repos\FinalDesignMathSoftware\FinalDesignMathSoftware\Form3.cs:line 41
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at FinalDesignMathSoftware.Program.Main() in C:\Users\EngAb\source\repos\FinalDesignMathSoftware\FinalDesignMathSoftware\Program.cs:line 19


Есть Идеи ?

Что я уже пробовал:

private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("Please select path where you want to backup your database", "Backup", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;

            }
            else
            {
                SqlConnection con = new SqlConnection(conString);
                string database = con.Database.ToString();
                string cmd = "BACKUP DATABASE [" + database + "] TO Disk '" + textBox1.Text + "\\" + "Dataase" + "-" + DateTime.Now.ToString("yyy-MM-dd--HH-mm-ss") + ".bak'";
                using (SqlCommand command = new SqlCommand(cmd, con))
                {
                    if (con.State != ConnectionState.Open)
                    {
                        con.Open();
                    }
                    command.ExecuteNonQuery();
                    command.Dispose();
                    MessageBox.Show("The database is successfully backed up", "Backup process", MessageBoxButtons.OK, MessageBoxIcon.Information);



                }
            }
        }

1 Ответов

Рейтинг:
2

Suo ZhengWei

Привет, я проверил детали исключения.
Неверный синтаксис рядом 'C:\Users\EngAb\OneDrive\EmguCV\Dataase-2019-12-11--23-11-12.bak".
Source=.Net Поставщик Данных SqlClient
это ошибка о sql grammer .

ваша команда sql:

string cmd = "BACKUP DATABASE [" + database + "] 
TO Disk 
'" + textBox1.Text + "\\" + "Dataase" + "-" + DateTime.Now.ToString("yyy-MM-dd--HH-mm-ss") + ".bak'";


правая команда sql:
string cmd = "BACKUP DATABASE [" + database + "] 
TO Disk =N  /*check me */
'" + textBox1.Text + "\\" + "Dataase" + "-" + DateTime.Now.ToString("yyy-MM-dd--HH-mm-ss") + ".bak'";


EngAb1989

Привет. Спасибо за ваш ответ. Вряд ли до сих пор не работает мой код. Определенно ваш код поможет пропустить синтаксическую ошибку. Отладка показывает
системы.Данных.Sqlclient как.Sqlexception в
HResult=0x80131904
Сообщение=имя объекта или столбца отсутствует или пусто. Для операторов SELECT INTO убедитесь, что у каждого столбца есть имя. Для других операторов ищите пустые псевдонимы. Псевдонимы, определенные как "" или [], не допускаются. Измените псевдоним на действительное имя.
Source=.Net Поставщик Данных SqlClient
Трассировка стека:

Suo ZhengWei

Сообщение=имя объекта или столбца отсутствует или пусто. Для операторов SELECT INTO убедитесь, что у каждого столбца есть имя. Для других операторов ищите пустые псевдонимы. Псевдонимы, определенные как "" или [], не допускаются. Измените псевдоним на действительное имя.

Сообщение показывает, что некоторые имена таблиц или столбцов не имеют правильного формата.Псевдонимы, определенные как "" или [], не допускаются. у меня нет никаких сообщений о структуре вашей таблицы базы данных.так что я ничего не могу для тебя сделать. извиняюсь. Я предлагаю вам сначала проверить структуру таблиц вашей базы данных.