جلسه دوم: نحوه اتصال به SQL از طریق VB6 و VB.NET
برای وصل شدن به بانک اطلاعاتی SQL Server، باید دو کار رو انجام بدیم. یکی تعریف یک
کانکشن(Connection) برای وصل شدن به دیتابیس و تعریف یک
دستور(Command) برای ارسال دستورات به بانک اطلاعاتی
شاید اینجا این سوال پیش بیاد که چرا ما باید به بانک اطلاعاتی، دستور بفرستیم؟
فرض کنین می خواین از بانک اطلاعاتیتون فقط اون رکورد هایی رو ببینین که توشون کلمه "سلام" وجود داره، اگه ما نتونیم این موضوع رو به بانک اطلاعاتی بگیم، مجبوریم بعد از دریافت همه رکورد ها از دیتابیس یه برنامه بنویسیم که تمام رکورد هایی که کلمه "سلام" رو ندارن، نشون نده. حالا اگه حجم اطلاعات توی دیتابیس خیلی زیاد باشه، برنامه ما از کار می افته چون داره روی رکورد ها دنبال کلمه "سلام" می گرده و کاربر رو مجبور می کنه بیکار بشینه تا کار برنامه ما تموم بشه. اما SQL این مشکل رو حل کرده و چیزی به نام دستور(Command) تعریف کرده که شما توسط اون می تونین دستورات لازم رو بهش ارسال کنین تا وقت دریافت اطلاعات از دیتابیس نیاز به محاسبه دوباره اون ها نباشه. سرعت پردازش SQL نسبت به برنامه هایی که ما برای پردازش می نویسیم انقدر بالا هستش که هیچ کسی بدون دستورات SQL برنامه ننویسه.(برنامه ای دارم می نویسم که روی 105 میلیون دیتا پردازش های زیادی انجام می ده.انجام این کار با دستورات SQL توی 7 دقیقه انجام می شه ولی با VB احتمالاً بیشتر از 7 ساعت)
پس تا اینجا گفتیم به دو متغییر احتیاج داریم: کانکشن(Connection) و دستور(Command).
برای تعریف این دو متغییر در VB6 باید مراحل زیر رو دنبال کنیم:
از منوی پروژه(Project) گزینه References رو انتخاب می کنیم
از صفحه باز شده گزینه Microsoft ActiveX Data Objects 6.0 Library رو انتخاب کنین:
در حقیقت ما با این کار به کتابخانه VB یه سری اشیا اضافه کردیم. می دونم این جمله، عین این کتابای درپیت تو بازار شد به خاطر همین بیشتر توضیح می دم.
وقتی می خوایم یه متغیر رو تعریف کنیم، می نویسیم Dim A as String، وقتی می خوایم نوع متغیر رو تعریف کنیم(در اینجا String) یه لیستی رو VB باز می کنه که اسم انواع متغیر ها توشه. حالا وقتی ما Microsoft ActiveX Data Objects 6.0 Library رو به پروژمون اضافه می کنیم یه سری گزینه به اون لیسته اضافه می شه و در حقیقت ما می تونیم متغیر ها رو با انواع بیشتری تعریف کنیم.
حالا به محیط کد نویسی ویژوال بیسیک برید و در قسمت General بنویسین(قسمت جنرال به بالاترین جایی که می تونین توش کد بنویسین می گن، اون جا شما متغیر های اصلی رو تعریف می کنین که توی همه روال های برنامه به کار می آن):
کد:
Dim cn As New ADODB.connection
Dim rs As New ADODB.Recordset
cn یا کانکشن، همون متغیری هستش که قراره باهاش عمل کانکشن رو انجام بدیم
rs یا رکوردست، همون متغیری هستش که می خوایم باهاش دستورات رو به دیتابیسمون بفرستیم
حالا توی رویداد Form_Load بنویسید:
کد:
cn.Open "Provider=SQLOLEDB.1;User ID=sa;password=;Initial Catalog=Master;Data Source = (Local);"
rs.Open "SELECT * FROM sys.databases", cn, adOpenStatic, adLockOptimistic
همون طور که مشخصه توی خط اول، کانکشن رو ساختیم، به عبارتی که جلوی cn.Open نوشته شده می گن ConnectionString
ما توی ConnectionString به ترتیب این ها رو گفتیم:
Provider=SQLOLEDB.1 یعنی به چه دیتابیسی وصل شو(در اینجا SQL)
User ID=sa نام کاربری رو تعریف کردیم که از طریقش به دیتابیس وارد بشیم. نام کاربری sa حتی روی کامپیوتر شما هم وجود داره، چون وقتی SQL Server رو نصب می کنین خودش به صورت اتومات این نام کاربری رو می سازه
password= در اینجا هم رمز عبور برای نام کاربری sa رو مشخص می کنین، که این نام کاربری احتیاج به رمز نداره
Initial Catalog=Master مشخص کردیم که می خوایم به کدوم دیتابیس وصل بشیم. که اینجا دیتابیس Master هستش(این هم به صورت پیش فرض وجود داره)
Data Source = (Local) و در نهایت گفتیم که به چه سروری وصل بشیم که ما تحت شبکه کار نمی کنیم و اینجا نوشتیم local. اون پرانتز هایی که دور local هستن رو حتماً بذارین!!!
اینجا لازم می دونم یه توضیح برای اون دوستانی بدم که پیش خودشون دارن می گن پس چرا توی این ConnectionString ما آدرس دیتابیس رو مثلاً به صورت C:\DB.mdf نمی دیم:
در حقیقت سیستم SQL یه خورده متفاوته! شما یه سری سرور داری(یا تحت شبکه یا محلی) و روی اونها دیتابیس هاتو می سازی، پس وقت وصل شدن هم لازم نیست از آدرس کاملش استفاده کنی، صرفاً کافیه نام سرور و نام دیتابیس رو ذکر کنی
اینو آماتور ها نخونن: می شه توی ConnectionString آدرس فایل دیتابیس رو هم داد که البته باید Permission دسترسی به اون آدرس رو داشته باشید. این کار فقط زمانی انجام می شه که دیتابیستون تحت سرور تعریف نشده و نمی خواین هم به سرور Attach کنینش
حالا بریم سراغ خط دوم:
ما با خط دوم داریم دستورات رو به دیتابیسمون می فرستیم. جلوی rs.Open یه عبارت نوشته شده که بهش Command گفته می شه.
من در اینجا نمی خوام این Command رو توضیح بدم چون توی درس سوم به صورت مفصل در موردش صحبت می کنیم. تا همین جا بدونین که ما با این دستور به دیتابیس گفتیم همه اطلاعات رو از جدول sys.databases بیار
جلوی Command نوشتیم این دستور رو به کدوم کانکشن بفرسته و به همین خاطر نوشتیم cn
در دو قسمت بعدی نوشتیم adOpenStatic, adLockOptimistic. لازم نیست بدونین که چی نوشتیم ولی در همین حد بدونین که نوع دسترسی به دیتابیس رو مشخص کردیم. برای گرفتن اطلاعات بیشتر می تونین به این آدرس مراجعه کنین:
http://www.adopenstatic.com/FAQ/jetcursortypes.asp
تا اینجا ما تونستیم یه کانکشن بسازیم و یه دستور بهش ارسال کنیم.
اگه خیلی دوست دارین تا نتیجه رو هم ببینن باید این کار رو بکنین که من خیلی اجمالی توضیح می دم چون به بحث ما مربوط نمی شه:
به منوی پروژه(Project) می رین و گزینه Components رو انتخاب می کنین. از لیست باز شده گزینه Microsoft DataGrid Control 6.0(OLEDB) رو انتخاب کنین
و صفحه رو با زدن دکمه OK ببندین، حالا از تولباکس(Toolbox) سمت چپ گزینه اضافه شده رو به فرمتون اضافه کنین. حالا توی همون رویداد Form_Load در آخرین خط(بعد از rs.Open) بنویسین: Set DataGrid1.DataSource = rs
حالا برنامه رو اجرا کنین و از دیدن کاری که کردین لذت ببرین
منبع: خودم