PDA

View Full Version : Attach کردن بانک اسکیول سرور



ali_md110
سه شنبه 02 مهر 1387, 12:55 عصر
بنام خدا
یک روش برای وصل کردن دیتابیس بر روی اسکیول سرور اجرای اسکریپتهای اسکیول میباشد در زیر یک پروژه جهت Attach کردن بانک اسکیول به پایگاه اسکیول سرور توضیح داده شده
دقت کنید این برنامه به همراه پروژه نصب یا INSTALL شما اجرا میشود
چنانچه از داخل پروژه و خود ویژوال استودیو برنامه را Run کنید برنامه اجرا نمیشود باید پس از ساخت برنامه نصب , setup را اجرا کنید , خود برنامه نصب عمل Attach را انجام میدهد
مرحله اول
ابتدا از منوی file گزینه New > Project و زبان ویژوال بیسیک را انتخاب میکنیم در قسمت Temlates گزینه Class Library و یک نام دلخواه مثلا DBsetup برای کلاسمون انتخاب میکنیم
میبندیم
مرحله دوم
ابتدا باید یک کلاس نصب بسازیم
در قسمت Solution Explorer گزینه Class1.vb را حذف و بر روی نام پروژه(( DBsetup کلیک راست کرده گزینه Add و سپس New Item را انتخاب و در پنجره با ز شده در قسمت Templates یک کلاس نصب کننده یعنی گزینه Installer Class را از آیتم های موجود انتخاب با یک نام دلخواه مثلا Installer1.vb نامگزاری میکنیم .این مسیر از طریق منوی Project و زیر منوی Add New Item هم قابل دسترسی است
( دقت کنید در ویژوال استودیو 2008 این گزینه Installer Class در گره General قرار گرفته )
مرحله سوم
باید یک فایل Txt را به پروژه اضافه کنیم این فایل در برگیرنده دستورات اسکیول یا همان SQL statement هست که با آن بانک و جداول و سایر جزئیات را میسازیم
از طریق منوی Project و زیر منوی Add New Item یک فایل file Text بنام sql.txt را به پروژه اضافه میکنیم
در سولوشن اکسپلورر sql.txt رو انتخاب ودر پنجره Properties خاصیت BuildAction
این فایل را به Embedded Resource تغییر داده sql.txt را باز کرده و دستورات اسکیول برای ساخت جداول بانک برنامه را در این فایل قرار میدهیم حتی میتوان اسکریپت ساخت بانک را در این قسمت قرار داد

CREATE TABLE [dbo].[Employees] (
[Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Rsvp] [int] NULL ,
[Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY];

ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD
CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED
(
[Name]
) ON [PRIMARY]

این دستورات را میتوانید از طریق برنامه sql server management آماده کنید
مرحله چهارم
در سولوشن اکسپلورر کلاس نصبی را که اضافه کردیم (Installer1.vb) را انتخاب کرده با کلیک راست بر روی آن View Code را انتخاب کرده به قسمت کدنویسی کلاس میرویم

1- در قسمت جنرال برنامه در بالای ماژول دستورات زیر را imports میکنیم
Imports System.IO
Imports System.Reflection
Imports System.Data.SqlClient

Public Class Installer1
2-یک کانکشن از نوع اسکیول تعریف کرده

Dim masterConnection As New System.Data.SqlClient.SqlConnection

Public Sub New()
MyBase.New()
چنانچه قصد نصب بر روی لوکال یا نسخه ای از اسکیول سرور مانند 2000 دارید از یکی از رشته اتصالهای زیر استفاده کنید
masterConnection.ConnectionString = "Data Source=(local);Initial Catalog=master;Integrated Security=True"
یا
masterConnection.ConnectionString = "packet size=4096;integrated security=SSPI;" & "data source=""(local)"";persist security info=False;" & "initial catalog=master"
اگر میخواهید بر روی نسخه اکسپرس2005 اسکیول سرور نصب کنید میتونید از رشته اتصالهای زیر استفاده کنید
masterConnection.ConnectionString = "Data Source=.\sqlexpress;Initial
Catalog=master;Integrated Security=True"
masterConnection.ConnectionString = "Data Source=(local)\sqlexpress;Initial Catalog=master;Integrated Security=True"
InitializeComponent()
End Sub
کدهای زیر را پس از ساب روتین New اضافه کنید
Private Function GetSql(ByVal Name As String) As String
Try


Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()


Dim strm As Stream = Asm.GetManifestResourceStream( _
Asm.GetName().Name + "." + Name)


Dim reader As StreamReader = New StreamReader(strm)
Return reader.ReadToEnd()

Catch ex As Exception
MsgBox("In GetSQL: " & ex.Message)
Throw ex
End Try
End Function
Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String)
رشته اتصال را میتوان در این قسمت هم مقدار دهی کرد
'masterConnection.ConnectionString = "Data Source=(local);Initial 'Catalog=master;Integrated Security=True"

Dim Command As New SqlClient.SqlCommand(Sql, masterConnection)
Command.Connection.Open()
Command.Connection.ChangeDatabase(DatabaseName)
Try
Command.ExecuteNonQuery()
Finally
Command.Connection.Close()
End Try
End Sub

Protected Sub AddDBTable(ByVal strDBName As String)
Try
جهت ساختن دیتابیس
ExecuteSql("master", "CREATE DATABASE " + strDBName)

جهت ساختن جدول
ExecuteSql(strDBName, GetSql("sql.txt"))

Catch ex As Exception
MsgBox("In exception handler: " & ex.Message)
Throw ex
End Try
End Sub

Public Overrides Sub Install(ByVal stateSaver As _
System.Collections.IDictionary)

MyBase.Install(stateSaver)
AddDBTable(Me.Context.Parameters.Item("dbname"))

End Sub

از منوی Build گزینه DBsetup Build را انتخاب کرده کامپایل میکنیم
مرحله پنجم
حالا نوبت اضافه کردن پروژه نصب به برنامه میباشد
از منوی File گزینه Add سپس New Project در دیالوگ Add New Project گره Other Project Types را باز کرده Setup and Deployment Projects و ایتم Setup Project را انتخاب کرده و نام پروژه نصب را DB_Setup میگزاریم

در سولوشن اکسپلورر بر روی پروژه نصب (DB_Setup )کلیک راست کرده گزینه View را و سپس File System را انتخاب میکنیم در قسمت File system Editor
Application Folder را انتخاب کرده از منوی Action گزینه Add و سپس Project Output را انتخاب در دیالوگ Add Project Outpot Group گزینه Primary output را بر میگزینیم سپس ok
مرجله ششم
در این مرحله نوبت به ساخت دیالوگهای دلخواه برای پروژه نصب میرسه
دیالوگها جهت ورود پارامترهای مورد نیاز کلاس نصب میباشد
پروژه نصب را در سولوشن انتخاب کرده با کلیک راست بر روی ان از طریق view سپسUser Interface را انتخاب کرده در User interface editor گره start زیر Install را انتخاب کرده با کلیک راست بر روی start یا از طریق منوی Action و انتخاب گزینه Add Dialog یک دیالوگ از نوع Textboxes(A) انتخاب میکنیم دیالوگ اضافه شده را انتخاب کنید و از منوی Action از طریق زیر منوی Move Up این دیالوگ را به بالا حرکت دهید تا زیر دیالوگ Welcom قرار گیرد اینکار را از طریق دراگ کردن توسط موس هم میتوان انجام داد
حالا دیالوگ اضافه شده را انتخاب کرده در قسمت Properties در قسمت Banner Text یک نام دلخواه مثل specify Database Name در قسمت Bodytext هر چه دوست دارید بنویسید
در قسمت Edit1lable که یک لیبل جهت مشخص کردن نام بانک هست میتوان با یک نام دلخواه نام گزاری کرد
مهمترین بخش در اینجا قسمت Edit1Property هست که باید آنرا به یاد داشته باشید از EDITA1 به CA1 تغییر بدهید
خواص Edit2Visable, Edit3Visable, Edit4Visable,راfalse کنید
چون کلاس نصب ما یک ارگومان بیشتر ندارد فقط به EditA1 نیاز داریم آن هم جهت مشخص کردن نام بانک برنامه
حتی میشود این دیالوگ باکس را هم از برنامه نصب حذف کرد و نام دیتابیس را بدون درخواست از کاربر در سرور ثبت کرد


مرحله هفتم
مرحله آخر اضافه کردن یک Custom Action به پروژه نصب میباشد
پروژه نصب را در سولوشن اتخاب کرده با کلیک راست بر روی آن از طریق view سپس Custom Action را انتخاب کرده در Custom Actions Editor گزینه install را انتخاب با کلیک راست برروی install یا از طریق منوی Action با انتخاب گزینه Add Custom Action یک دیالوگ بنام Select Item In Project باز میشود . Application Folder را در دیالوگ نمایش داده شده دابل کلیک کرده و primary output from DBsetup(Active) را انتخاب و ok میکنیم
و حال ایتم اضافه شده یعنی(Primary output from DBsetup (Active در Custom Action Editor در زیر پوشه install انتخاب کرده(دقت کنید حتما این ایتم انتخاب شده باشد)
و در قسمت properties خاصیت CustomActionData را به /dbname=[ CA1] تغییر داده و پروژه نصب را از طریق منوی Build DBsetup Build> کامپایل میکنیم
حالا میتوان با کلیک راست بر روی پروژه نصب در سولوشن و انتخاب install برنامه را تست نمایید یا به مسیر پروژه رفته و از انجا برنامه نصب را اجرا کرد

میتوان با یک تغییر کوچک مرجله 6 را حذف کرد و برنامه هیچ آرگومان ورودی نیاز نداشته باشد
کافیست در مرحله هفتم برای خاصیت CustomActionData مقدار /dbname=myDBname را جایگزین /dbname=[ CA1] کنید و بخش 6 را از پروژه حذف کنید
یا میتوان برنامه ارگومانهای مختلف داشته باشد مانند نام سرور –نام پایگاه – user name – password

Sub Zero
سه شنبه 02 مهر 1387, 14:00 عصر
من دیتابیسهامو به پروژه Setup اضافه کردم چون حاوی داده هستند واین طوری نیست که از اول ساخته بشن.
با توجه به اینکه بعداز کامپایل کردن پروژه Setup ، فایلها به صورت Cab. هستند. آیا استفاده از این روش امکان پذیره

damanpak
پنج شنبه 06 مرداد 1390, 18:03 عصر
سلام
دوستان برنامه نویس دارن عزیزی که سوال پرسیدن رو گیج میکنند
من هم قبلا میخواستم قبلا همین کد رو بنویسم که حدود سه روز دنبالش گشتم و در نهایت موفق شدم بنویسم و حدود 20 خط شد
ایشاالله رفتم خونه واستون میزارم که ازش استفاده کنین
با تشکر
دامن پاک

na141ali
سه شنبه 07 آذر 1391, 18:36 عصر
با سلام
از آموزش شما بسیار ممنونم
لطفا کمی در مورد تابع Private Function GetSql و Protected Sub AddDBTable و Public Overrides Sub Install و نحوه کار آنها توضیحاتی بفرمائید.
با تشکر