ورود

View Full Version : سوال: برگرداندن اطلاعات دیتابیس SQL Server



ROSTAM2
پنج شنبه 26 مهر 1403, 12:35 عصر
سلام

من برای برگرداندن دیتابیس از این روش استفاده کردم (Console Application):


Sub ExecuteQuery(Query As String)
Try
Dim Server As String = ""
Dim login As String = ""
Dim password As String = ""
Dim ConnectionString As String = ""
Dim Value As String = ""
Console.WriteLine()
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine("{0} Connect to New Server: ", vbTab)
Console.WriteLine()
Console.ForegroundColor = ConsoleColor.DarkGreen
value = " Server: "
FillName(value, 17)
Console.Write(value)
Console.ForegroundColor = ConsoleColor.Gray
value = Console.ReadLine
If Value.Length = 0 Then Exit Sub
Server = value.Trim
Console.WriteLine()
Console.ForegroundColor = ConsoleColor.DarkGreen
Value = " Login(User ID): "
FillName(value, 17)
Console.Write(value)
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine("sa")
login = "sa"
Console.ForegroundColor = ConsoleColor.DarkGreen
Value = "'sa' Password: "
FillName(value, 17)
Console.Write(value)
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Black
value = Console.ReadLine
password = value.Trim
Console.ResetColor()


Dim connection As SqlConnection
ConnectionString = NewConnectionString(Server, login, password, "master")
connection = New SqlConnection(ConnectionString)
connection.Open()
Dim command As SqlCommand
command = connection.CreateCommand()
command.CommandText = Query
command.ExecuteNonQuery()
Catch ex As Exception
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("{0} {1}! {2}", vbTab, ex.Message.Trim, Query)
End Try
End Sub
Function NewConnectionString(Server As String, login As String, password As String, Optional Database As String = "Projects") As String
Return String.Format("Data Source={0};Initial Catalog={3};User ID={1};Password={2}", Server, login, password, Database)
End Function

Shared Sub Backup()
ExecuteQuery(String.Format("BACKUP DATABASE Projects TO DISK='{0}'",
IO.Path.GetFullPath(".\Projects.BAK")))
End Sub
Shared Sub Restore()
ExecuteQuery(String.Format("RESTORE DATABASE Projects FROM DISK='{0}'",
IO.Path.GetFullPath(".\Projects.BAK")))
End Sub



ولی موقع Restore این خطا رو بر می گردونه که دیتابیس در حال استفاده است....


With ProjectsAdapter.Connection
.Close()
End With
AdapterManager.Connection.Close()
Data.Restore()


156218

ROSTAM2
پنج شنبه 26 مهر 1403, 12:49 عصر
SQL Server Management Studio هم همین خطا رو برمی گردونه!!!

156219

mazoolagh
پنج شنبه 26 مهر 1403, 13:42 عصر
سلام و روز خوش

1- میتونین بجای نوشتن یک console app از command lineهای خود sql استفاده کنین.
2- در restore ، یک with replace اضافه و تست کنین ببینین مشکل حل میشه.



osql -E -Q "BACKUP DATABASE ... TO DISK='...'"
osql -E -Q "RESTORE DATABASE .. FROM DISK='...' WITH REPLACE"

156220

ROSTAM2
جمعه 27 مهر 1403, 22:20 عصر
سلام مجدد

Console Application من به شبکه متصل می شه، یک جدول دارم که با Dataset کوئری ها رو براش نوشتم که از کلاینت نرم افزار رو اجرا می کنم همون جدول AppProjects قابل مدیریت هست هیچ مشکلی هم نداره، ولی با جدولی که جدیدا اضافه کردم Videos برای اتصال مشکل داره (کلاینت) ولی در سیستم اصلی هیچ مشکلی نداره.

نکته اینجاست که من پوشه دیباگ از پروژه رو به اشتراک گذاشتم و از طریق powershell نرم افزار رو اجرا می کنم.

خطای جدول videos در کلاینت...

156232

کدهای تعاریف Adapter ها :


Friend WithEvents ProjectsAdapter As New Projects.
ProjectsDatasetTableAdapters.
AppProjectsTableAdapter With {.ClearBeforeFill = True}
Friend WithEvents VideosAdapter As New ProjectsDatasetTableAdapters.
VideosTableAdapter With {.ClearBeforeFill = True}


Friend WithEvents Dataset As New ProjectsDataset
Friend WithEvents AdapterManager As New Projects.
ProjectsDatasetTableAdapters.
TableAdapterManager With {.AppProjectsTableAdapter =
ProjectsAdapter, .VideosTableAdapter = VideosAdapter}


پردازش اولیه:


Dim ConnectionString As String = Data.ConnectionString
If ConnectionString.Length > 0 Then
With AdapterManager.Connection
Try
.Close()
.ConnectionString = ConnectionString
.Open()
Catch ex As Exception
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("{0} {1}!", vbTab, ex.Message.Trim)
Finally


End Try
End With
End If


Data.ConnectionString اطلاعات اتصال به SQL Server در دیتابیس Settings ذخیره می شه که موقع اجرای نرم افزار استفاده می شه

ROSTAM2
جمعه 27 مهر 1403, 22:45 عصر
مثل اینکه تغییر ConnectionString از AdapterManager به تنهایی کافی نبوده ....

با این دستور مشکل اتصال به جدولو حل شد....


With VideosAdapter.Connection
.Close()
.ConnectionString = ConnectionString
.Open()
End With

mazoolagh
یک شنبه 29 مهر 1403, 12:44 عصر
این "جدولو" خیلی خوب بود!