# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) >  ***اموزش ایجاد انواع کانکشن استرینگ***

## moferferi

سلام.
1.اموزش ساخت کانکشن استرینگ از طریق 
SqlConnectionStringBuilder


SqlConnectionStringBuilder csb = newSqlConnectionStringBuilder();
csb.DataSource = "192.168.0.1,1151"; //یا// csb.DataSource = "rap\\orbitasoftware";
csb.Add("Initial Catalog", "mydatabasename");
csb["Integrated Security"] = true;


2.دستکاری مقادیر پیش فرض در رشته اتصال

string sqlcon= "Data Source=192.168.0.1,1151;" +
"Integrated security=SSPI;Initial Catalog=mydatabasename;"+
"Connection Timeout=30;Connection Lifetime=0;" +
"Min Pool Size=0;Max Pool Size=200;Pooling=true;";

conectionlefttime:
طول مدت بر حسب ثانیه.که بعد از ایجاد سپس اتصال از بین میرود.پیش فرض صفر هست که یعنی بیشترین مدت را استفاده میکنه.
max pool size:
بیشترین تعداد اتصالی که مجاز است در تجمیع باشد.مقدار پیش فرض هم 100 است.
min pool size:
بیشترین تعداد اتصالی که در تجمیع باقی میماند.مقدار پیش فرض 0 است
pooling:
مشخص میکنه که اتصال از یک تجمیع استخراج میشه یا اینکه در صورت لزوم به تجمیع اضافه میشه
استفاده از تجمیع در رشته اتصال باعث میشه که به جای بستن و باز کردن اتصال جدید بارها از اتصال موجود استفاده کرد
--------------
3.اتصال به بانک اکسس 2003

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=mydatabasename.mdb";

4.اتصال به بانک اکسس 2007
string oledbConnectString =
                "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                @"C:\Documents and Settings\bill\My Documents\" +
                "Northwind 2007.accdb;" +
                "Jet OLEDB:Database Password=password;";

5.ذخیره رشته اتصال در فایل پیکر بندی برنامه:
ابتدا application configuration را از add new item انتخب کنید و کد های زیر را به اون اضافه کنید
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="mydatabasename"
         providerName="System.Data.SqlClient"
         connectionString="Data Source=(local);
          Integrated security=SSPI;Initial Catalog=mydatabasename;" />
    </connectionStrings>
</configuration>

6.حالا استفاده از رشته اتصال موجود در فایل پیکربندی
string sqlConnectString =
                ConfigurationManager.ConnectionStrings[
                "AdventureWorks"].ConnectionString;
البته قبلش فضای نام using System.Configuration را به برنامه اضافه کنید.

7.ایجاد رشته اتصال توسط کاربر به صورت خیلی کلاس بالا
یه فرم ایجاد کنید . بعد کنترل property grid را به فرم اضافه کنید
حالا یه لیبل هم به فرم اضافه کنید.
حالا هم کد های زیر 

SqlConnectionStringBuilder scsb=
newSqlConnectionStringBuilder();
public Form1()
{
InitializeComponent();
propertyGrid1.SelectedObject = scsb;
}
privatevoid propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
{
label1.Text = scsb.ConnectionString;
}

حالا کاربر میتونه خودش پارامتر های رشته اتصال را تغییر بده و اونا یجایی مثل فایل تنظیمات برنامه ذخیره کنه.

----------


## hamide_kh

سلام دوست عزیز من می خوام با استفاده از  app.cnfigبه دیتا بیسس conect شوم 
app.config را بصورت زیر نوشتم

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Test"
providerName="System.Data.SqlClient"
connectionString="Data Source=(local);
Integrated security=SSPI;Initial Catalog=Test;" />
</connectionStrings>
</configuration>


و در فرم لود نیز کد زیر را می نویسم 


string sqlConnectString =ConfigurationManager.ConnectionStrings["AdventureWorks"].ConnectionString;
SqlConnection conn = new SqlConnection(sqlConnectString); 
SqlDataAdapter adapter = new SqlDataAdapter("Select * from Student",conn);
DataSet ds = new DataSet("Student");
conn.Open();
adapter.SelectCommand.Connection = conn;
adapter.Fill(ds,"student");
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "student";
conn.Close();

که خطای زیر را بهم میده
The name 'ConfigurationManager' does not exist in the current context 
البته فضای نامی را هم که گفتید را اضافه کردم

----------


## hamide_kh

سلام
کسی جواب منا نمیده

----------


## sara.f

> سلام
> کسی جواب منا نمیده


سلام
لازم نیست با app.config کاری داشته باشید.
ببینید دوست عزیز شما می خواید بدونید در sqlconnection برای connection string چی بنویسد؟
وقتیبه db وصل میشید و app.config ایجاد میشه،اونوقت می تونید از قسمت connection string در app.config استفاده کنید.
یا راه راحت تر این هست که از view --> server explorer اون data connection موزد نظرتون را انتخاب کنید و از properties آن connection string را بدست بیارید.
سوالتون همین بود یا منظور دیگه ای داشتید؟

----------


## hamide_kh

سلام
من app.configرا درست کردم و با اون هیچ مشکلی ندارم
اما وقتی این کد را مینویسم
string sqlConnectString =
                ConfigurationManager.ConnectionStrings[
                "AdventureWorks"].ConnectionString;
خطای زیر را میده
The name 'ConfigurationManager' does not exist in the current context  

البته فضای نام را همadd کردم
البته توی همون پست قبلیم کامل توضیح دادم

----------


## mohsen_zelzela00

در فایل app.config اینو باید بنویسی

 
<?xml version="1.0" encoding="utf-8" ?> 
- <configuration>
  <configSections /> 
- <connectionStrings>
  <add name="ConnectionString" connectionString="کانکشن استرینگ رو اینجا میزاری" providerName="System.Data.SqlClient" /> 
  

  </connectionStrings>
  </configuration>



  و برای استفاده قبلش باید تو قسمت Refrence ها System.Configuration اضافه کنی

و سپس NameSpace 

using System.Configuration;


را اضافه می کنیم

و سپس برای استفاده به صورت زیر عمل می کنیم


oSqlConnection = new SqlConnection();
            oSqlConnection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

----------


## satar_niakan

سلام
دوستان من يه مشكل دارم و اونم اينه كه وقتي تو ويژوال add connection‌ميزنم سرور كامپيوترم رو نميشناسه يعني



چكار بايد بكنم؟؟؟
ممنون ميشم اگه كمك كنيد 		 		  		  		 		  		 		 			 				
https://barnamenevis.org/showthread.php?t=182114

----------


## sd.CSharpProgrammer

> سلام
> دوستان من يه مشكل دارم و اونم اينه كه وقتي تو ويژوال add connection‌ميزنم سرور كامپيوترم رو نميشناسه يعني
> 
> چكار بايد بكنم؟؟؟
> ممنون ميشم اگه كمك كنيد                                                                                             
> https://barnamenevis.org/showthread.php?t=182114


دوست عزيز نام سرور رو بايد خودت اونجا تايپ كني. اونهم با قالب زير :


```
ComputerName\Sql Instance name
```

 يعني اول اسم كامپيوترت رو بنويس و بعدش يك بك اسلش و بعد هم نام روايت يا نسخه sql كه استفاده ميكني. مثال :

```
SamiRam\SQLEXPRESS
```

 بعد از اينكه اينكار رو انجام دادي پايين پنجره كامبو باكس Select or enter a database name رو باز كن و ديتابيس مورد نظرت رو از توي ليست انتخاب كن.

موفق باشي

----------


## bloverman

آقایون من پیشنهاد میکنم یه سری به سایت
http://www.connectionstrings.com/
بزنن

----------


## iranpcl

دوستان من هم یه مشکلی دارم که نمیتونم از پسش بر بیام(میبخشید اینجا میپرسم)
دارم یه پروژه مینویسم که به sql احتیاج دارم با یوزر پسوردش
قبلا کمی با sql compact 3.5 کار کردم و آسون میتونستم از همون قسمت که برای ایجاد تو ویژوال استدیو 2010 استفاده میکردیم براش پسورد تعریف کنم ولی sql compact خیلی ضعیف بود
حالا میخوام از sql server file database استفاده کنم که به هنگام اجرای پروژه روی سیستم های دیگه نیاز به نصب sql server نباشه
تو اتصال بهش به صورت معمولی(بدون پسورد)مشکلی ندارم ولی نمیدونم چطور براش پسورد تعریف کنم
تو قسمتی که ایجاد میکردیم قبول نمیکنه پسورد و یوزر رو
خیلی گشتم چیزی پیدا نکردم که حل کنه مشکلم رو. لطفا راهنمایی کنید
Untitled-2.jpg

----------


## iranpcl

لطفا کسی جواب بده

----------


## Esmail Solhkhah

> حالا میخوام از sql server file database استفاده کنم که به هنگام اجرای پروژه روی سیستم های دیگه نیاز به نصب sql server نباشه


برای SQL SERVER چه بخاید دیتابیس رو به سرور اتچ کنید چه از AttcahtDBFileName استفاده کنید

چه از UserInstance استفاده کنید یا نکنید

باید SQL SERVER رو سیستم نصب باشه

مگه اینکه برنامتون تحت شبکه باشه که اونوقت نیازه فقط رو سرور SQL SERVER رو نصب کنید

برا تعریف یوزر و پس هم دیتابیستون رو با Management Studio بسازید (روش سرراست تر همینه)و همونجا کاربرش رو ست کنید.

موفق باشید.

----------


## iranpcl

> برای SQL SERVER چه بخاید دیتابیس رو به سرور اتچ کنید چه از AttcahtDBFileName استفاده کنید
> 
> چه از UserInstance استفاده کنید یا نکنید
> 
> باید SQL SERVER رو سیستم نصب باشه
> 
> مگه اینکه برنامتون تحت شبکه باشه که اونوقت نیازه فقط رو سرور SQL SERVER رو نصب کنید
> 
> برا تعریف یوزر و پس هم دیتابیستون رو با Management Studio بسازید (روش سرراست تر همینه)و همونجا کاربرش رو ست کنید.
> ...


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

----------


## iranpcl

یه سوال دیگه هم داشتم
sql Management Studio رو نصب و دیتابیس رو تعریف کردم
تنها یوزر پسوردی که تونستم روش بگذارم یوزر پس اکانت ویندوز بود و دیگه هیچ....
چجوری میتونم یوز نیم و پسوردی که خودم میخوام رو بگذارم و کلا پایگاه داده ای که تعریف میکنم فقط با اون در دسترس باشه؟؟؟
متشکر

----------


## Esmail Solhkhah

> ولی این همه برنامه که ساخته میشه با C#‎ (که به پایگاه داده نیاز دارند) و  بدون نصب sql server یا maccess کار میکنند برچه مبنایی ساخته میشند؟؟


اگه به عرایض بنده دقت کنید گفتم



> مگه اینکه برنامتون تحت شبکه باشه که اونوقت نیازه فقط رو سرور SQL SERVER رو نصب کنید


اگه برنامه تحت شبکه نصب بشه اونوقت SQL SERVER رو روی سرور نصب میکنن و برای کلاینتها نیاز به نصب SQL SERVER نیست

قضیه اکسس فرق میکنه ، اون یه دیتابیس لوکاله و درایورش معمولا تو خود سیستم عامل تعبیه شده.




> تنها یوزر پسوردی که تونستم روش بگذارم یوزر پس اکانت ویندوز بود و دیگه هیچ....
> چجوری میتونم یوز نیم و پسوردی که خودم میخوام رو بگذارم و کلا پایگاه داده ای که تعریف میکنم فقط با اون در دسترس باشه؟؟؟


این زمانیه که شما از Windows Authentication استفاده میکنید

اگه از SQL Server Authentication استفاده کنید میتونید کاربر Sa رو استفاده کنید و رمز مورد نظر خودتونو براش ست کنید.

ولی دقت کنید در این حالت هم میشه با اکانت Administrator ویندوز و تحت Windows Authentication به دیتابیس کانکت شد

موفق باشید.

----------


## iranpcl

متشکر از پاسختون



> اگه برنامه تحت شبکه نصب بشه اونوقت SQL SERVER رو روی سرور نصب میکنن و برای کلاینتها نیاز به نصب SQL SERVER نیست
> 
> قضیه اکسس فرق میکنه ، اون یه دیتابیس لوکاله و درایورش معمولا تو خود سیستم عامل تعبیه شده.


منظورم نرم افزار های حسابداری، اسکن و ... هست که نه تحت شبکه هستن و نه برای استفادشون به sql سرور و اینا احتیاج هست
دیتابیس لوکال دیگه ای نداریم برای چنین استفاده ای؟

----------


## Esmail Solhkhah

> منظورم نرم افزار های حسابداری، اسکن و ... هست که نه تحت شبکه هستن و نه برای استفادشون به sql سرور و اینا احتیاج هست


خب میتونن از دیتابیسهای دیگه ای استفاده کرده باشن ، لزومی نداره هر برنامه ای از SQL SERVER استفاده کنه این برمیگرده به طراح اون سیستم که تو چه شرایطی از چه دیتابیسی استفاده کنه




> دیتابیس لوکال دیگه ای نداریم برای چنین استفاده ای؟


SQLite - VistaDB - SQL Compact ...

----------


## iranpcl

> SQLite - VistaDB - SQL Compact ...


 پروژم یه نرم افزار ثبت هست که نیاز به ثبت اطلاعات(فراوون)، سورت، گزارش گیری و اینا دارم
برای سیستم با سخت افزار نسبتا ضعیف شما کدوم دیتا بیس رو از مابین لوکال ها پیشنهاد میکنید؟

----------


## Esmail Solhkhah

> پروژم یه نرم افزار ثبت هست که نیاز به ثبت اطلاعات(فراوون)، سورت، گزارش گیری و اینا دارم
> برای سیستم با سخت افزار نسبتا ضعیف شما کدوم دیتا بیس رو از مابین لوکال ها پیشنهاد میکنید؟


پیشنهاد بنده VistaDB

بعلت پشتیبانی کامل از TSQL - دارای محیط منیجر - ابزار Import Export 

قابلیت رمزگذاری روی دیتابیس - استفاده از اسمبلی های دات نت داخل دیتابیس - عدم نیاز به نصب در سیستم مقصد (یک فایل DLL ساین شده) و ...

http://www.vistadb.net/

موفق باشید.

----------


## iranpcl

آخه vista db پولیه!

----------


## Esmail Solhkhah

نسخه Retail رو سرچ کنید

اگه پیدا نکردید PM بدید بنده دارمش ، آپ میکنم لینکشو براتون میفرستم.

موفق باشید.

----------


## ali reza mansoori 2

من فقط به دلیل امنیت بالای SQL رفتم سراغش
حالا بعد از کلی دردسر تو نصب کردنش وقتی میخوام واردش بشم اصلا نیاز به وارد کردن یوزر و پس نیست ولی داخل کانکشن استرینگ باید یوزر و پس وارد کنم
اگه امکان داره رهنمایی کنیم چه جوری روی SQL2008 یوزر و پس دلخواهم رو بزارم

----------


## hamid2reza

سلام دوست من ببخشيد اگر اشتباه امدم لطفا مرا راهنمايي كنيد
من در ويژال استديو 2008 توسط سي شارژ دات نت بانك اطلاعاتي طراحي كردم و مي خوام تمام اطلاعات يا قسمت از ان در اكسل 2007 نشون بده باتمام جزئيات 
يعني با تمام حساب وكتابهاي مربوط به ركورد مثلا هر كارمند 
لطفا مرا راهنمايي كنيد
ممنون

----------


## mohammad kafiyan

سلام به دوستان مي خوام طبق گفته ي دوستمان جناب آقاي moferferi عمل کنم



> ايجاد رشته اتصال توسط کاربر به صورت خيلي کلاس بالا
> يه فرم ايجاد کنيد . بعد کنترل property grid را به فرم اضافه کنيد
> حالا يه ليبل هم به فرم اضافه کنيد.
> حالا هم کد هاي زير
> 
> SqlConnectionStringBuilder scsb=
> newSqlConnectionStringBuilder();
> public Form1()
> {
> ...


حالا کاربر ميتونه خودش پارامتر هاي رشته اتصال را تغيير بده و در ap.config ذخيره شود و در برنامه ام از اين connectionstring که درفايل ap.config ذخيره شده استفاده کنم
سوال : نحوه ذخيره سازي connectionstring کاربر برا اساس propertyGrid انتخاب کرده چگونه با کد نويسي در فايل مربوط به ap.config ذخيره کنم
سوال:زماني که stup ساخته شد آيا فايل app.config قابل نمايش است و آيا به صورت دستي مي توان دسترسي پيدا کرد و تغيير داد در واقع مي خواهم قابل دسترسي نباشد

----------


## Esmail Solhkhah

> سوال : نحوه ذخيره سازي connectionstring کاربر برا اساس propertyGrid  انتخاب کرده چگونه با کد نويسي در فايل مربوط به ap.config ذخيره کنم


وقتی تو Settings پروژتون پارامتر تعریف میکنید دو تا Scope داره : User-Application
وقتی Scope رو بذارید Application اونوقت فایل تنظیمی شما که از روی app.config ساخته میشه و اسمش YourApplication.exe.config
میشه ReadOnly برای اینکه بتونید در RunTime تغییرات تو فایل مربوطه بدید باید Scope پارامتر مربوطه رو بذارید User

برا خوندن و نوشتنش هم


   textBox1.Text = Properties.Settings.Default.MyConnectionString;  // Read

            Properties.Settings.Default.MyConnectionString = "Your New Connectin String"; // Change

            Properties.Settings.Default.Save(); // Save

دقت کنید با این روش موقع Save کردن ، پارامتر شما تو خود فایل exe ست نمیشه بلکه یه فایلی از روی app.config شما ساخته میشه و کپی میشه به یه مسیری که یادم نیس(سرچ کنید پیدا میشه)
و اینطوری اگه اون فایل پاک بشه یا ... تنظیمات شما بهم میخوره و مهمتر اینکه امنیت نداره. پیشنهاد میکنم برا این کارا از یه فایل xml مستقل استفاده کنید (موقع ستاپ هم بهش دسترسی دارید) و دیتا رو داخلش انکریپت کنید.

موفق باشید.

----------


## mohammad kafiyan

با سلام و تشکر دوست عزیز *Esmail Solhkhah
ولی با xml تا به حال کار نکردم و طریقه ذخیره و خواندن اطلاعات در اون به چه صورت است اگر مطلب یا توضیحاتی در این زمینه دارید ممنون می شم قرار بدهید
می خواستم ببینم اگر یک فایل text در کنار exe برنامه قرار دهم و تغییرات مربوط به connectionstring در این فایل اعمال کنم * *(انکریپت*) *وبرای خواندن (دیکریپت) کنم
آیا روش خوبی است یا خیر
*

----------


## Esmail Solhkhah

سلام دوست عزیز

https://barnamenevis.org/showthread.p...1%D9%BE/page75

https://barnamenevis.org/showthread.p...1%D9%BE/page73

https://barnamenevis.org/showthread.p...1%D9%BE/page71





> *می خواستم ببینم اگر یک فایل text در کنار exe برنامه قرار دهم و تغییرات مربوط به connectionstring در این فایل اعمال کنم * *(انکریپت*) *وبرای خواندن (دیکریپت) کنم
> آیا روش خوبی است یا خیر*


اصول کار یکیه : استفاده از یک فایل جانبی جهت ذخیره سازی ولی XML بهتره

----------


## mohammad kafiyan

با سلام و تشکر دوست عزیز *Esmail Solhkhah
حالا می خواستم بدونم کاری می شه کرد که این فایل غیر قابل دسترسی باشه و بشه اطلاعات از توی خود برنامه در این فایل تغییر داد و خارج از برنامه قابل تغییر نباشه
*

----------


## Esmail Solhkhah

> حالا می خواستم بدونم کاری می شه کرد که این فایل غیر قابل دسترسی باشه و  بشه اطلاعات از توی خود برنامه در این فایل تغییر داد و خارج از برنامه  قابل تغییر نباشه


خود فایل رو انکریپت کنید و تو برنامه دیکریپتش کنید(فاز دوم)

تو قسمت 
* نمونه برنامه های کوچک و مفيد در سي شارپ*

نمونشو گذاشتم 

موفق باشید.

----------


## hamzeh alboghbaysh

با عرض سلام خدمت اعضای محترم سایت برنامه نویس.
من حمزه آلبوغبیش عضو جدید سایت هستم. چند وقته که یه هاستینگ تهیه کرده و وب سایتمو توی اون آپلود کردم. یه پایگاه داده ی sql با پسوند mdf هم کنار پروژه ی asp خودم گذاشتم اما نمی دونم چه کانکشنی رو برای اتصال به این پایگاه بگذارم. لطفا اگه کسی کانکشن مورد نظر رو بلده لطف کنه بگه تا لطفش رو هر طوری که هست جبران کنم. لطفا نگید برو به سایت http://www.connectionstrings.com. من برای اتصال در فضای کامپیوتر از کانکشن زیر استفاده می کنم. کسی هست که این لطف بزرگ رو به من بکنه؟
"Data Source=.\SQLEXPRESS;AttachDbFilename=" & "E:\WebSite Project\S113.mdf" & ";Integrated Security=True;Connect Timeout=30;User Instance=True"

----------

