PDA

View Full Version : نحوه بدست آوردن نام سرور اس کیو ال و چند سوال مربوطه



Omid.R.A.Candy
چهارشنبه 03 مهر 1392, 09:02 صبح
سلام

1-ما چطوری می تونیم اسم سرور sql رو بدست بیاریم؟منظورم بدست آوردن عبارت
.\SQLEXPRESSاست.

2- ما اگه فایل دیتا بیسمون رو صفر تا صدش رو با خود اسکیو ال بسازیم و از نوع mdf باشه و بخوایم تو سیستم هدف از کنار فایل اجرایی مون لود بشه کانکشن چی خواهد بود؟

3- ما می تونیم از طریق منیجمنت دیتا بیسمون رو اتچ و دی اتچ کنیم.حالا بخواییم این کارو با vs بکنیم کدهاش چی خواهند بود؟

4-کدهایی جهت ساخت فایل دیتا بیس با ویبی سراغ دارین ؟

Mani_rf
چهارشنبه 03 مهر 1392, 09:16 صبح
1-
Dim oTable As Data.DataTable
Dim lstServers As List(Of String)

oTable = System.Data.Sql.SqlDataSourceEnumerator.Instance.G etDataSources

For Each oRow As DataRow In oTable.Rows
If oRow("InstanceName").ToString = "" Then
lstServers.Items.Add(oRow("ServerName"))
Else
lstServers .Items.Add(oRow("ServerName").ToString & "\" & oRow("InstanceName").ToString)
End If
Next oRow


2- کانکشن شما در چنین شرایطی فقط نام دیتابیسش تغییر میکنه و مابقیش ثابته که به راحتی میتونید بسازید.

3- این لینک (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.server.attachda tabase.aspx)رو بخون (هرچند این کار خیلی اصولی نیست)

4- کد های ساخت دیتابیی به VB ربطی نداره، باید با SQL بسازید . همونطوری که یک دستور سلکت رو اجرا می کنید می تونید این رو هم اجرا کنید. خیلی کار مشکلی نسیت، هر کاری که تو SQL Server شما با ویزارد انجام میدید اون پست تبدیل به کد میشه و اجرا میشه، در نتیجه برای همه کارها کد معادل وجود داره که متاسفانه بیشتر افراد حتی بدون این که اصول کار با یک ابزاری رو بدونند شروع به استفاده ازش می کنند و در نتیجه هیچ کدوم از اونها رو نمی دونند.


USE master;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\saledat.mdf' ,
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\salelog.ldf' ,
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
GO

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);


(مثال از MSDN (http://technet.microsoft.com/en-us/library/ms176061.aspx))

5- طبق قوانین سایت، طرح چند سوال در یک تاپیک خلاف قوانین و مشمول حذف تاپیک می باشد. لطفا قوانین سایت (http://barnamenevis.org/misc.php?do=showrules)را مطالعه کنید.

Omid.R.A.Candy
چهارشنبه 03 مهر 1392, 09:38 صبح
واقعا جامع بود!!! حال کردم.:تشویق: این هم نمی دونستم نمیشه چندتا سوال پرسید دیگه تکرار نمی کنم.

در مورد کانکشن با اتچ بودن دیتا بیس به sql2008 و روش ویزارد به کانکشن زیر رسیدم:


"Data Source=.\sqlexpress;Initial Catalog=USA;Integrated Security=True"

و همچنین من خودم یرای کانکشن دیتا بیس sql ساخته شده با خد vs از این استفاده می کنم:


"Data Source=.\SQLEXPRESS;AttachDbFilename=" & Data_Source_Adress & ";Integrated Security=True;Connect Timeout=30;User Instance=True"

حالا من امدم اون فایل رو کنار برنامه کپی کردم و با کنکش دوم لود شد.بدون توجه به این که آیا این تو sql اتچ هست یا نه!!! چون ما از یه مسیر دیگه و با دستور قاطع اتچ خوندیم درسته؟ اگه درسته تو این روش دوم اصولا نگرانی از اتچ بودن بانک نداریم؟(درسته؟)

و یک مورد دیگر من امدم دو کانکش رو تلفیق کردم و به این رسیدم:


"Data Source=.\SQLEXPRESS;AttachDbFilename=" & Data_Source_Adress & ";Integrated Security=True"
همون طور که می بینید عبارات :

Connect Timeout=30;User Instance=True
حذف شدن، ولی باز هم کانکشن کار کرد! اگر بودن یا نبودنش فرقی نمیکنه پس چرا تو اولی گذاشته بودن؟


----------------------------------------------

من امدم برا همین پروژم یه ستاپ ساختم و برای اجرایی شدن در سیستم هدف رفتم علاوه بر نت فریم ورک اینها عبارت

sql server 2005 express edition SP2(x86)
رو هم اضافه کردم ولی بعد ساخت فایل نصبی دیدم که فقط این رو داره: sqlexpr32 ، حالا اگه سیستم هدف 64 باشه برنامه کار نمیکنه! یا باید یه چیز دیگه به جای اون عبارت بالایی اضافه کنیم؟

Omid.R.A.Candy
چهارشنبه 03 مهر 1392, 09:44 صبح
1-
Dim oTable As Data.DataTable
Dim lstServers As List(Of String)

oTable = System.Data.Sql.SqlDataSourceEnumerator.Instance.G etDataSources

For Each oRow As DataRow In oTable.Rows
If oRow("InstanceName").ToString = "" Then
lstServers.Items.Add(oRow("ServerName"))
Else
lstServers .Items.Add(oRow("ServerName").ToString & "\" & oRow("InstanceName").ToString)
End If
Next oRow





این کد ها رو امتحان کردم به lstServers خطا میگیره!!! حلا کاری ندارم ریختم تو یه مسیج باکس دیدم اسم سرور رو داد:OMID ولی من با .\SQLEXPRESS وارد می شم !!!

چون شک کردم رفتم با OMID وارد شدم این رو پرت کرد!!!!


111167

Omid.R.A.Candy
چهارشنبه 03 مهر 1392, 13:04 عصر
USE master;
GO
CREATE DATABASE Sales
ON
( NAME = Sales_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\saledat.mdf' ,
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\salelog.ldf' ,
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
GO

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)


این کدهایی که آدرس دادین برا sql هست من می خوام این کارو با کد نویسی در VS انجام بدم برا این کار باید چه کرد؟

Omid.R.A.Candy
پنج شنبه 04 مهر 1392, 23:03 عصر
جناب آقای Mani_rf من همچنان منتظر پاسخ سوالاتم هستم.

a_mohammadi_m
جمعه 03 آبان 1392, 14:47 عصر
با سلام
1- میشه کل دیتابیس رو توسط vb ایجاد کرد
- اجرای کدهای sql از داخل vb ( اسکریپتهای sql را بصورت nonQuery باید اجرا کرد )
- راه اصولی تر استفاده از اشیاء SMO خود sql است که روشی جدیدتر که از sql2008 به بعده که جایگزین DMO در sql2005 شده
2- استفاده از Attached Database اصلا هم راه غیر اصولی نیست و توسط خود میکروسافت طراحی و توصیه شده که قبلا وجود نداشت
3- دقت کنید که هر پارامتری در جای خودش و در زمان مناسبش تاثیراتی داره و بیخود نیست مثلا TimeOut برای جلوگیری از خطای اتصال به پایگاه در زمانیه که سرور پایگاه سرعت ارتباطی مناسبی نداره یا در راه دوری قرار داره پس یک محدودیت زمانی براش میدیم که اگه متصل نشد دوباره برنامه تلاش کنه یا پیغام بده ارتباط برقرار نمیشه
و ...
شما معمولا سوالات دو پهلو و مبهم می پرسید در نتیجه دیرتر به جواب میرسید
موفق باشید