ورود

View Full Version : آموزش تکمیلی دسترسی به پایگاه داده تحت شبکه محلی



firoozi90
جمعه 05 اسفند 1390, 10:16 صبح
چند قدم کلی برای این کا ر آقا Farid.N توضیح دادن حالا من از شما می خوام بیاین با هم این مراحلو کاملا باز کنیم تا برای تازه واردها توی این مبحث برنامه نویسی(مثل من) کمکی بشه.پس خواهشا هرکسی میدونه دریغ نکنه :

1-قبل از شبکه ای کردن برنامه شما، همون برنامتون در حالت Local باید به خوبی کار کنه

2-کانکشن استرینگ تون پویا باشه یعنی نیاید یه جایی از برنامه تون بهصورت رشته ای تعریف کنید و باید بتونید اونو عوض کنید.(مثلا از یه تابع در یافت بشه و استفاده از آبجکت SQLConnectionBiulder توصیه می شه)

3-برنامتون حداقل باید بتونه اطلاعات زیر رو از کاربر دریافت کنه:

*-نام سرور

*-نام کاربری و کلمه عبور جهت ورود به سرور(برای اینکه باید حالت MixedMode هم مد نظر باشه)

*-نام پایگاه داده(این مورد یا مستقیم توسط کاربر وارد می شه یا توسطبرنامه شما، برای مثال تمام دیتابیس هایی که نام آنها با MyDb شروع میشه متعلق بهبرنامه شماست که در این صورت هم، باید به کاربر اجازه بدید دیتابیس خودشو انتخابکنه)

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

4-در سروراز مسیرزیر وارد تنظیمات Sql Server شوید(فرض بر اینه که هم در سرور و هم کلاین sql server نصبشده):


Start>All Programs>Microsoft SQL Server (2005-2008-2012)>ConfigurationTools>SQL Server Configuration Manager

*-Sql Server Browser رو استارت کنید(بهتره ازتنضیماتش رو بزارید رو اتوماتیک استارت)

*-از گره Network وProtocols بخش TCP/IP رو Enable کنید

5-اگه فایر وال دارید یا سرویس sql رو معرفی کنید یا پورت ارتباطی (پیشفرض:1433و1434) رو آزاد بزاید(در هر دو سمت سرور و مشتری)

نکته ها و توصیه ها:

*-همیشه در حالت شبکه سرور رو در حالت MixedMod بزارید و پسورد های سختانتخاب کنید

*-بهتره سمت سرور نسخه کامل و در سمت مشتری نسخه Express از Sql Server نصب بشه

*-ترافیک شبکه رو در نظر بگیرید (مطمئن نباشید که همیشه تحت شبکه10/100/1000 قرار داشته باشید)

بعد از اینکه این تنظیمات انجام شد فقط کافیه کانکشن استرینگ تون روبه به سمت سرور تغییر جهت بدین(DataSource)
اگه در ریز کاری ها هم مشکل دارید مشکل تون رو دقیقا بگید تا من و دیگر دوستان تا جایی که می تونیم کمکتون کنیم(مثلا نگید انجام دادم نشد! باید پیغام خطا و کدی رو که اونجا خطا اتفاق افتاده رو بزارید)

firoozi90
جمعه 05 اسفند 1390, 10:19 صبح
قدم اول که تقربیا مشخصه
در مورد قدم دوم نحوی ایجاد کانکشن پویا چیست؟کسی می تونه در مورد SQLconnectionBuilder توضیح کامل بده.

فرید نجفلو
جمعه 05 اسفند 1390, 21:28 عصر
خودم توضیح می دم:لبخندساده:
کانکشن پویا یعنی اینکه شما باید اونو طوری بدست بیارید که هر وقت کاربر SQL Server خودش یا سرورش رو عوض کرد بتونید به راحتی اونو تغییر بدین برای مثال(در حالت ساده و ابتدایی) شما می تونید یک آبجکت عمومی از نوع SqlConnetionBuilder رو ایجاد و اعلام کنید و هر کدی که خواست با Sql کارکنه و بهش وصل بشه از اوون استفاده کنه و نه اینکه هر تکه کد واسه خودش یه کانکشن استرینگ داشته باشه
و این کانکشن استرینگ باید یه جایی مثل Settings برنامه تون ذخیره و در اجرای بعدی از همون جا بازیابی بشه
حالا کاربر در اجرای بعدی(و در حالت های پیشرفته تر) در حین اجرا خواست پایگاه داد و یا سرور رو عوض کنه. شما فقط باید مشخصات اتصال رو از کاربر دریافت( بند سوم) و فقط در یک محل( متغیر عمومی مذکور) تغییر ایجاد کنید

firoozi90
جمعه 05 اسفند 1390, 23:19 عصر
فرید جان ممنون از توجه و توضیح کاملت.
میشه برامون یک مثال کاربردی از این نوع برنامه نویسیا بزارید.
یه سورس ساده که تحت شبکه باشه و اعضای اون بتونن همزمان ازش استفاده کنند.
واقعا به ما کمک بزرگی می کنید اگر این کارو کنید.

فرید نجفلو
جمعه 05 اسفند 1390, 23:35 عصر
ببینید سورس اضافه ای لازم نیست
وقتی شما یک برنامه با پایگاه داده SQL ساختید که بر روی یک کامپیوتر به خوبی کار می کنه اون خود به خود تحت شبکه هم کار می کنه
شما فقط باید کتنکشن استرینک رو عوض کنید( در مورد کانکشن استرینگ که مشکلی ندارید؟)
همون طور که گفتم بعد از این کار هیچ چیزی داخل برنامه شما نیاز به تغییر نداره و فقط باید تنظیمات خارج از برنامه در دو سمت (و بیشتر سمت سرویس دهنده) انجام بشه

firoozi90
شنبه 06 اسفند 1390, 10:30 صبح
من از این کانکشن توی برنامه ام استفاده کردم


con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\TAGHVIM.mdf;Integrated Security=True;User Instance=True");

با این وجود اگر بخوام برنامه ام تحت شبکه باشه باید از sqlconnectionbuilder استفاده کنم؟میشه یه مثال بزنید از کانکشن؟
یعنی با این وجود از برنامه من میشه چندکاربر بصورت همزمان ازش استفاده کنه؟

فرید نجفلو
شنبه 06 اسفند 1390, 12:52 عصر
دوست عزیز نوع AttachDbFilename برای محیط شبکه ای مناسب نمی باشد برای همین من این قسمت از رشته اتصال شما رو تغییر دادم.با این حال برای محیط تک سیستمی باز قابل استفاده می باشد
فراموش نکنید که متد های sheard را در یک کلاس یا ماژول جدا تعریف کنید تا در کل برنامتون قابل دسترس باشه(به خاطر اجتناب از پیچیدگی مثال من در یک محل تعریف کردم)

Public Class frmDB
Public Shared ConnStrBldr As New SqlClient.SqlConnectionStringBuilder
Public Shared Sub ChangeConnStr(Optional Server As String = "", Optional DB As String = "", _
Optional Integrated As Boolean = False, Optional UserName As String = "", _
Optional Password As String = "")
With ConnStrBldr
If Server <> "" Then
.DataSource = Server
End If
If DB <> "" Then
.InitialCatalog = DB
End If
.IntegratedSecurity = Integrated
If UserName <> "" Then
.UserID = UserName
End If
If Password <> "" Then
.Password = Password
End If
End With
End Sub
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'this line may load from app setting , registry , INI file etc..
ConnStrBldr.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog==TAGHVIM.mdf;Integrated Security=True;User Instance=True"
'Examples
'Changing Server
ChangeConnStr(Server:="OtherServer\MSSQLSERVER")
'Changing DB
ChangeConnStr(DB:="OtherDB")
'Full Changing
ChangeConnStr("FaridPC\SQLEXPRESS", "TestDB", True, "Farid.N", "@Srt0ngPassword4MyConnection!;)")
'...
End Sub
Public Sub GetDataExample()
Dim dt As New DataTable
Using myConn As New SqlClient.SqlConnection
myConn.ConnectionString = ConnStrBldr.ConnectionString 'This Line Is Important
Dim TSQL = "Select * From MyTable"
Dim Adp As New SqlClient.SqlDataAdapter(TSQL, myConn)
Adp.Fill(dt)
If myConn.State <> ConnectionState.Closed Then myConn.Close()
End Using
'Use Data Here
End Sub

End Class