PDA

View Full Version : برقراری ارتباط به SQL از طریق کد



koosha69
سه شنبه 23 شهریور 1389, 19:17 عصر
سلام،
من قصد دارم از طریق C#‎ به SQL متصل شوم البته با کدنویسی! (در محیط VS2010 کار می کنم!)
تا جایی که من اطلاع دارم باید یک شئ از نوع SqlConnection ایجاد کنم و در آن یک String حاوی اطلاعات لازم برای اتصال به SQL قرار دهم! مشکل من اینجاست که هر مقداری قرار می دهم، به یک پیام خطای چند خطی مواجه می شوم که در خط آخر آن نوشته:

(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)


نمونه کد برنامه ام:


SqlConnection objConnection = new SqlConnection
("Data Source=(local); Initial Catalog=MyDB; Integrated Security=true");
objConnection.Open();
که در خط Open با خطا مواجه می شوم!
لطفا در تعریف String مرا راهنمایی کنید!!!
مرسی.

flash118
سه شنبه 23 شهریور 1389, 19:41 عصر
دوست عزیز خوب پیش رفتید ولی کمی ناقص هست کد هاتون که من براتون تکمیلش میکنم


گام اول :
using System.Data.SqlClient;
گام دوم:
SqlConnection connec = new SqlConnection("data source=. ;initial catalog=test;integrated Security=true");

SqlCommand comm = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();
حال من برای مثال می خواهم اطلاعات جدولم رو در sql هست در هنگام بارگذاری فرمم دیتا گرید ویو پر بشه
private void Form1_Load(object sender, EventArgs e)
{
connec.Open();
comm.Connection = connec;
comm.CommandText = "select * from tbltest";
ds.Clear();
da.SelectCommand = comm;
da.Fill(ds, "mytable");
connec.Close();

mydg.DataBindings.Add(new Binding("DataSource", ds, "mytable"));
mydg.Columns[1].HeaderText = "ش دانشجو";
mydg.Columns[2].HeaderText = "نام";



}



پیروز و سر بلند باشین دوست عزیز

koosha69
سه شنبه 23 شهریور 1389, 22:37 عصر
ممنون از راهنمایتون دوست عزیز،
من قبلا هم همه این کارهارو می کردم، باز الان هم طبق گفته شما عمل کردم، ولی باز مثل قبل در هنگام اجرای دستور:


connec.Open();
به این خطا بر می خورم:


SqlException was unhandled
A network-related or instance-specific error occurred while establishing a connection to SQL Server.
The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
راهنمایی لطفا ... :افسرده:

arefba
چهارشنبه 24 شهریور 1389, 00:31 صبح
دوست عزیز به جای (.) و یا لوکال از مسیر زیر برو
TOOLS/connect to database

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

flash118
چهارشنبه 24 شهریور 1389, 08:02 صبح
دوست عزیز همان طورکه دوستمون arefba (http://www.barnamenevis.org/forum/member.php?u=99613) گفتن شما اول از این طریق چک کنید در ضمن قبل رفتن به انتخاب connection string روی test connection کلیک کنید تا از صحت برقراری ارتباط با بانک اطلاعاتی تون مطمئن باشید فکر کنم مشکل در ارتباط شما با دیتا بیس هست یعنی unkown شدن دیتا بیس یه زمانی هست که دیتا بیس در sql هست ولی در c#موقع برقاری ارتباط نشان نمیده احتمالا شما هم این برنامه براتون پیش اومده بازم یه تست کنید اگه اون جور بود روش حلش رو براتون بگم که چطور کنید موفق باشید

koosha69
چهارشنبه 24 شهریور 1389, 16:28 عصر
با تشکر از دوستان،

جناب arefba،
طبق گفته شما عمل کردم، و به این string رسیدم:


Data Source=JACK-SAW\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=True

در این خط به وجود '\' اشکال می گیرد، دقیقا به حرف S بعد از آن!
چگونه این مشکل را رفع کنم؟


جناب flash118،
خیلی ممنون می شوم که راه حل خود را بفرمایید!
البته من وقتی طبق گفته جناب arefba عمل می کنم، در قسمت Add Connection، منوی Server Name به هیچ وجه به طور خودکار SQL را شناسایی نمی کند و اصلا هیچ مقداری ندارد! حتی با Refresh ! و من مجبورم Server Name را از طریقی دیگر پیدا و در آن محل کپی کنم!!! سپس با زدن Test Connection پیام ارتباط موفقیت آمیز را دریافت می کنم!


مرسی که مرا راهنمایی می کنید!

aghayex
چهارشنبه 24 شهریور 1389, 17:35 عصر
SqlConnection sqlcon = newSqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename="+
AppDomain.CurrentDomain.BaseDirectory
+"database1.mdf;Integrated Security=True");
sqlcon.Open();

koosha69
پنج شنبه 25 شهریور 1389, 02:30 صبح
مشکل من هم با راهنمایی جناب aghayex (http://www.barnamenevis.org/forum/member.php?u=132075)، حل شد! مرسی از همه دوستان!

سوال:
من میخوام توی پروژه ام یک دیتابیس ایجاد کنم که فایل دیتابیس هم در پوشه پروژه باشد! از چه راهی و از چه نوع دیتابیس SQL استفاده کنم؟
من از این مسیر رفتم:

Project > Add New Item > Data > Local Database

و یک دیتابیس با پسوند sdf. ایجاد کردم! حالا که می خوام بهش وصل بشوم از من User & Password برای دیتابیس می خواهد!


Cannot open database "Database" requested by the login. The login failed.
Login failed for user 'Admin\User'.
برای دیتابیس فقط تونستم Password تعیین کنم، ولی هیپ جایی برای User پیدا نکردم!!!!
مشکل پشت مشکل ... :افسرده:

arefba
پنج شنبه 25 شهریور 1389, 09:35 صبح
sa
رو به عنوان یوزر بزن
احتمالا مشکلت حل شه

koosha69
شنبه 27 شهریور 1389, 01:55 صبح
با سلام،
توی این چند روز با کمک های مفید شما دوستان و جستجو و تلاش های خودم به جاهای خوبی رسیدم!
در مورد مشکل آخرم هم، یک دیتابیس از نوع Microsoft SQL Server Database File ایجاد کردم و با دادن آدرس کامل دیتابیس در SqlConnection String به ویژگی AttachDbFilename حل شد و به Login Error بر نخوردم!

حالا یه مشورت:
من یک Table حاوی مشخصات افراد دارم، برنامه ای که نوشتم طوریه که در یک حلقه از تابعی استفاده می کنم که هربار فیلدهای یک رکورد خاص از Table را تفکیک می کند! یعنی طرز کار تابع به این صورت که هر بار به دیتابیس متصل می شود، تمام Table را در یک DataSet قرار می دهد و سپس آن رکورد مورد نظر را تفکیک می کند!
به نظر شما راه سریع تر و بهینه تر چیست؟ (به طور خلاصه هدف من تفکیک یک رکورد خاص از Table است!)
[به ذهنم رسید که به طوری BindingNavigator را با استفاده از کد پیاده سازی کنم، ولی چیز خاصی در این زمینه پیدا نکردم!]

aghayex
یک شنبه 28 شهریور 1389, 00:15 صبح
این کار تو برنامه رو داغون می کنه شما یک با اطلاعاتتون رو در یه دیتا تیبل می ریزی و بعد از اون استفاده می کنی و نیاز نیست که هر بار به دیتابیس وصل بشی.
نکته : زمانی از دیتا ست استفاده کن که می خوای از چندتا دیتاتیبل استفاده کنی یعنی دیتاست مجوعی از دیتا تیبل هاست

koosha69
یک شنبه 28 شهریور 1389, 20:23 عصر
حرف شما درسته! به همین خاطر دنبال راه بهتری هستم!!!

1. سریع ترین و بهترین استراتژی برای تعامل با دیتابیس در برنامه چیست؟
2. میخواستم بدونم نحوه کار BindingNavigator چطوریه؟ با DataSet کار می کنه یا مستقل؟ میشه طوری ازش استفاده کرد که بی نیاز از واسط گرافیکی باشه؟ یا طوری نحوه کارش شبیه سازی کرد؟

koosha69
دوشنبه 05 مهر 1389, 17:09 عصر
1- دوستان، من سوالم دوباره بر اساس نیازم مطرح می کنم! :
پایگاه داده برنامه من دارای 5جدول است که 4جدول (Child) با 1جدول (Parent) در فیلد ID دارای Relation است!
لطفا بفرمائید که من با چه روشی می توانم با سرعت بالا با پایگاه داده تعامل داشته باشم؟
(خودم DataTable را در نظر دارم! ولی نحوه عملکرد و پیاده سازی ان را به طور کامل نمی دانم!!!)
لطفا مرا راهنمایی کید !!!

2- آیا میشه با نوشتن Query اطلاعات داخل یک Table را مرتب کرد؟
(اونطوری که من متوجه شدم Query Sort تنها اطلاعات را به صورت مرتب شده نمایش می دهد و تاثیری بر Table نمی گذارد!)

aghayex
شنبه 17 مهر 1389, 17:30 عصر
در مورد سوال 2 اینکه شما بیایید اطلاعات موجود در تیبل رو مرتب کنید به این نیت که در آینده سرعت پایگاه داده تون بالا بره من چنین چیزی ندیدم حالا بگید در دستوری که به اس کیو ال دادید نتیجشو سورت کنه اون حرفی آخه چون اس کیو ال نسبت به پایگاه داده اکسس اینه که اطلاعات رو مدیریت می کنه و شما نیاز نیست این کار رو بکنید .
در مورد اتصال به اس کیو ال 2 راه وجود داره :
1 - روش سنتی که باید کد نویسی داشته باشی ( که اون در خدمتم )
2 - روش linq to sql که به نسبت روش اول راحتره ( که اونو شذمنده ام بلد نیستم )

hirkany
سه شنبه 19 بهمن 1389, 01:25 صبح
خیلی پست جالبی بود از دیدنش خیلی خوشحال شدم ... من هم تمام مشکلات این دوست عزیز (koosha69 (http://barnamenevis.member.php?111759-koosha69)) رو توی برنامه نویسی داشتم ( البته به بخشید که خودمو قاطیه برنامه نویس ها حساب کردم )
هنوز دستوراتی که دوستان دادن رو آزمایش نکردم ولی مطمئن هستم با این توضیحات مشکلاتم حل میشه
ی سوال و ی درخواست
سوال: دوست عزیزمون از بانک SDF استفاده کرد. فرقش با MDF چیه؟؟؟ کدوم نوع بانک بهتره؟؟ آیا بسته به نوع کار فرق می کنه که از کدوم استفاده کنیم؟؟؟؟
درخواست: میشه دستورات اینسرت ، دلِت، آپدیت و سرچ (like) ... رو هم ی توضیح کوچیک بدین. دوست عزیز flash118 (http://barnamenevis.member.php?74702-flash118) توصیحاتت خیلی جالب بود مخصوصا وقتی قدم به قدم توضیح فارسی نوشته بودی .... دمت گرم

javady_joon
شنبه 15 شهریور 1393, 18:11 عصر
میشه بگید چطور میتونم دستور select رو که میگیرم در خروجی نشون بدم؟