PDA

View Full Version : سوال: بهترین شیوه برای کار با دیتابیس؟



asadegha
سه شنبه 24 آبان 1390, 19:17 عصر
سلام دوستان.

من با vs2010 کار میکنم و دیتابیس sql.
ولی وسط کار توی اتصال به دیتابیس گیر میده.
مثلا اتچ نمی کنه یا ارور login fail میده یا ....
بیشتر گیر سر connection string هست.:گریه::لبخند:

می خوام بدونم بهترین شیوه برای کار با دیتا بیس چیه که این همه ارور الکی نده؟

من با دستورات sqlclient کار می کنم.

شما چه پیشنهادی دارین؟ چیکار کنم که با مشکل مواجه نشم.

در ضمن توی کار با دیتابیس عملیات حذف، درج، ویرایش، بک آپ و ریستور مد نظرمه.

ممنون میشم از راهنماییه ارزندتون.

Farshid007
سه شنبه 24 آبان 1390, 19:24 عصر
وقتی که دیتا بیس رو ساختی از پروپریتی هاش کانکشن استرینگ رو کپی کن و با اون کانکت شو
اگه خطا بده SQL ت مشکل داره

asadegha
سه شنبه 24 آبان 1390, 19:42 عصر
همین کارو میکنم.
ولی وسطای انجام پروژه یه دفعه میگه نمی تونم اتچ کنم.
اتچ رو بر می دارم، یخورده کار میکنه ولی باز گیر میده لاگین فیل میده.
اتچ رو میزارم میگه دیتا بیس یه جا دیگه در حال کاره (که نیست) نمی تونم بازش کنم.

h-rafiee
سه شنبه 24 آبان 1390, 20:09 عصر
از خود ویژوال استدیو دیتابیس رو اضافه کن و همه عملیات جدول سازی هم می تونی با همین ویژوال انجام بدی.
2- از بیس کد زیر برای کانکت شدن استفاده کن.

SqlConnection con = new SqlConnection();
con.ConnectionString=
@"Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|\Databasename.mdf;
Integrated Security=True;User Instance=True";
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "Select * from tablename";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable dt = New DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();


3-سربرگ های Data و SqlClient یادت نره.

zarrinnegar
سه شنبه 24 آبان 1390, 20:15 عصر
من از linq برای ارتباط استفاده میکنم
پروژه بزرگی رو هم باهاش هندل کردم هیچ وقت مشکلی نداشتم

کار باهاش ساده است میتونی امتحانش کنی منابع هم زیاد داره

asadegha
سه شنبه 24 آبان 1390, 20:17 عصر
دوستان دمتون گرم. الان بررسی میکنم.
نتیجه رو به اطلاع می رسونم.

asadegha
سه شنبه 24 آبان 1390, 21:00 عصر
الان میگه
Could not open new database 'C:\USERS\SADI\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\SCHOOLMONTHGRADE\SCHOOLMONTHGRADE\BI N\DEBUG\SCHOOLMONTHGRADEDB.MDF'. CREATE DATABASE is aborted.
An attempt to attach an auto-named database for file C:\Users\SADI\documents\visual studio 2010\Projects\SchoolMonthGrade\SchoolMonthGrade\bi n\Debug\SchoolMonthGradeDB.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
File activation failure. The physical file name "C:\Users\SADI\documents\visual studio 2010\Projects\SchoolMonthGrade\SchoolMonthGrade\bi n\Debug\SchoolMonthGradeDB_log.ldf" may be incorrect.
The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.

h-rafiee
سه شنبه 24 آبان 1390, 22:13 عصر
این ارور دقیقا چه زمانی رخ میده؟ خیلی خوبه به آموزش های ویدیویی مهندس کیانیان یک رجوعی کنی.
یا حداقل خط دستورات کانکت و نام پایگاهت رو می نوشتی

AliRezaPro
سه شنبه 24 آبان 1390, 22:46 عصر
کدتون رو برای بررسی قرار بدید

asadegha
چهارشنبه 25 آبان 1390, 00:50 صبح
سلام.
با تشکر از زحمات دوستان.
وقتی می خوام از دیتابیس استفاده کنم یه ارور میده.
دیتابیس رو پاک کردم دوباره اومدم به برنامه اد کنم ارور بالا رو داد.


ConnectionString=@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\SchoolMonthGradeDB.mdf;Integrated Security=True;User Instance=True";
SelectCommand="select options from tblOptions where Num like '1'";
SqlConnection cn = new SqlConnection(ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(SelectCommand, cn);
DataSet ds = new DataSet();
cn.Open();
da.Fill(ds);
cn.Close();


اینم از کدم. روی cn.open ارور میده.

asadegha
چهارشنبه 25 آبان 1390, 00:53 صبح
فکر کنم فایل دیتابیسم خراب شده دوباره باید بسازمش.
برای ساختن پایگاه از server-base database استفاده کردم. از local database استفاده کنم به نظرتون بهتر نیست؟
شاید این درد سر ها رو نداشته باشه.

ممکنه بخاطر ذخیره عکس تو یکی از فیلدها باشه؟

خود عکسو ذخیره کنم بهتره یا آدرس عکسو ذخیره کنم؟ هر چند فکر نمی کنم بخاطر ذخیره عکس باشه.

asadegha
چهارشنبه 25 آبان 1390, 00:56 صبح
این ارور دقیقا چه زمانی رخ میده؟ خیلی خوبه به آموزش های ویدیویی مهندس کیانیان یک رجوعی کنی.
یا حداقل خط دستورات کانکت و نام پایگاهت رو می نوشتی

اسم پایگاهم SCHOOLMONTHGRADEDB.MDF هست.
یه ارور میداد. دیتابیس رو پاک کردم دوباره اضافه کنم. این ارور رو داد بهم.

asadegha
چهارشنبه 25 آبان 1390, 02:18 صبح
دیتابیس رو از اول درست کردم. با کانکشن استرینگ دوست عزیز آقای h-rafiee جواب داره میده.

واما اینکه هنوز این سوال جواب داده نشد که چه روشی برای کار با دیتابیس بهتره؟

با یه مطلبی مواجه شدم به اسم Entity Framwork که توی vs2010 اضافه شده و نمونه ی کاملتر و پیشرفته تر ado.net هست.
اطلاعاتی در این باره دارین؟

یه وبلاگ گیر آوردم یه اطلاعات مختصری داده.

این مقدمه
http://oopc.mihanblog.com/post/30

و این هم قسمت اولشه
http://oopc.mihanblog.com/post/31

ولی کامل توضیح نداده. من چیز زیادی سر در نیاوردم. اگه اطلاعاتی دارین ممنون میشم اینجا قرار بدین تا همه ازش استفاده کنن.
خودمم چیزی گیر آوردم اینجا میگم.

باز هم از همکاریتون ممنوم.

h-rafiee
چهارشنبه 25 آبان 1390, 09:02 صبح
فکر کنم فایل دیتابیسم خراب شده دوباره باید بسازمش.
برای ساختن پایگاه از server-base database استفاده کردم. از local database استفاده کنم به نظرتون بهتر نیست؟
شاید این درد سر ها رو نداشته باشه.

ممکنه بخاطر ذخیره عکس تو یکی از فیلدها باشه؟

خود عکسو ذخیره کنم بهتره یا آدرس عکسو ذخیره کنم؟ هر چند فکر نمی کنم بخاطر ذخیره عکس باشه.

آدرس عکس رو بهتره ذخیره کنی و اگه می خوای می تونی حتی در محل برنامه ات هم ذخیره کنی که اگه از درایو هم پاک شد در محل برنامه ات کپی از اون باشه تا بانکت با مشکل مواجه نشه.

h-rafiee
چهارشنبه 25 آبان 1390, 09:07 صبح
بی شک تکنولوژی های جدید فریم ورک برتری دارن به تکنولوژی های گذشته. اما من توصیه ام همون ado.Net هستش چرا که برای یادگیری خیلی منابع در دست هست و یادگیری و بکارگیری ازش سریع تر می تونه باشه.
اما در هر صورت اگه ado.Net رو تا حدودی هم آشنا شدی می تونی برای یادگیری تکنولوژی های جدید اقدام کنی.

omidh2007
چهارشنبه 25 آبان 1390, 14:27 عصر
بهترین راه حل LINQ to SQL یا Entity FrameWork هستش .
توی ADO.net ، باید دو ساعت ConnectionString کپی کنی و SqlConnection , SQLCommand و ... بسازی
آخرش هم میبینی توی CommandString مثلا یدونه پرانتزی یا ویرگولی چیزی کم گذاشتی و کلا هر چی ساخته بودی نقش بر آب شد . :لبخند:
LINQ to SQL و EF ، خیلی راحت و به صورت هوشمند ، این کارا رو واست انجام میدن . :چشمک:

asadegha
چهارشنبه 25 آبان 1390, 18:32 عصر
بهترین راه حل LINQ to SQL یا Entity FrameWork هستش .
توی ADO.net ، باید دو ساعت ConnectionString کپی کنی و SqlConnection , SQLCommand و ... بسازی
آخرش هم میبینی توی CommandString مثلا یدونه پرانتزی یا ویرگولی چیزی کم گذاشتی و کلا هر چی ساخته بودی نقش بر آب شد . :لبخند:
LINQ to SQL و EF ، خیلی راحت و به صورت هوشمند ، این کارا رو واست انجام میدن . :چشمک:

دمت گرم داداش.
درباره linq اطلاعات در دسترس هست. تو همین سایت هم فراوون صحبت شده.
درباره EF از کجا اطلاعات گیر بیارم؟

asadegha
چهارشنبه 25 آبان 1390, 19:21 عصر
درباره Entity Framework(EF) یه چیزایی گیر آوردم.
ترجمه کنم. یه تاپیک آموزشی میزنم روشش رو توضیح میدم. خیلی باحاله. آدرس تاپیک هم همینجا قرار میدم.
تا قبل اون اگه دوستان اطلاعاتی دارن ممنون می شم اینجا قرار بدن.

mmd2009
پنج شنبه 26 آبان 1390, 00:20 صبح
با سلام

برای فهمیدن ef میتونید از این (http://www.pcpedia.ir/ViewArticle.aspx?ID=308)لینک استفاده کنید

برای اموزش هم میتونید به اینجا (http://irmeta.com/meta/index.php?topic=6232.0)برید

موفق باشید

ATili.Nero
پنج شنبه 26 آبان 1390, 15:05 عصر
سلام دوست عزیز
نوشته هات رو خوندم
به نظرم تمام مشکلات با برنامه نویسی 3 لایه حل می شه به جایی ایم که تو هر دستور بخوای اتصال رو برقرار کنه بزن تو یه کلاس عملیات اتصال و .... برقرار بشه
و بهد یه کلاس بنویس که اون اطلاعاتی که می خوای رو برات از کلاس اولی بگیره و تو برنامت از کلاس دومی استفاده کن
این یه مورد
مورد بعد توی قسمت SQL Server Confirigon Manegere برو و اونجا ببین باید تمام پروتکل های SQL به جز 2 تا همه باید On باشند
Conection String هم درست تعریف کردی
نباید مشکلی پیش بیاد

omidh2007
پنج شنبه 26 آبان 1390, 18:20 عصر
در حد insert , Update , Delete و دستورای ساده ، Entity FrameWork و LINQ با هم فرق چندانی ندارن .
مثلا توی LINQ to SQL ، دستور SubmitChanges داریم که جاش توی EF دستور SaveChanges داریم .
برای دستورات ساده ی Entity FrameWork ، میتونی به این آدرس مراجعه کنی
http://blogs.msdn.com/b/wriju/archive/2008/08/21/ado-net-entity-insert-update-and-delete.aspx
تا اونجایی که من شنیدم EF ، مدل ارتباطی پیشنهادی توسط خود Microsoftه .
یه برنامه نوشتم که توش استفاده از LINQ و EntityFramework و ... رو توضیح داده .
فقط برنامه به مقدار نا منظم و قر و قاطیه . چون یه جورایی مثل چرک نویس میمونه برای خودم .
ولی دانلودش کن ضرر نداره . :چشمک: GoodLuck

omidh2007
پنج شنبه 26 آبان 1390, 20:04 عصر
در ضمن یه سری نرم افزار ها هستن که بهشون دیتابیس رو میدی و اونا واست
StoredProcedure و کد موردنظر رو تولید میکنن . ( به اصطلاح CodeGenerator یا در اینجا StoredProcedure Generator
این یه نمونه از اون برنامه ها هست .
http://barnamenevis.org/showthread.php?108684-Database-Helper%D8%8C-%D8%B4%D8%B1%D9%88%D8%B9-%DB%8C%DA%A9-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%DB%8C-Open-Source-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3!&p=1294153&viewfull=1#post1294153 (http://barnamenevis.org/showthread.php?108684-Database-Helper%D8%8C-%D8%B4%D8%B1%D9%88%D8%B9-%DB%8C%DA%A9-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%DB%8C-Open-Source-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%21&p=1294153&viewfull=1#post1294153)

haniyehghassami
پنج شنبه 26 آبان 1390, 21:18 عصر
N\DEBUG\SCHOOLMONTHGRADEDB.MDF'. CREATE DATABASE is aborted.
An attempt to attach an auto-named database for file C:\Users\SADI\documents\visual studio 2010\Projects\SchoolMonthGrade\SchoolMonthGrade\bi n\Debug\SchoolMonthGradeDB.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
File activation failure. The physical file name "C:\Users\SADI\documents\visual studio 2010\Projects\SchoolMonthGrade\SchoolMonthGrade\bi n\Debug\SchoolMonthGradeDB_log.ldf" may be incorrect.
The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure




اول - سلام به همه
دوم - وقتی به خطایی برخورد می کنین که نمی فهمینشون اونها را توی گوگل بزنید تا سوال ها و جواب های خطای خوذتون را ببینید باهاش اشنا بشین
سوم - خط به خط را تا انجایی که بلد باشم معنی میکنیم با هم تا ببینیم مشکل از کجاست:متفکر:

link (http://barnamenevis.org/showthread.php?313524-%D8%B3%D9%88%D8%A7%D9%84-%D9%88-%D8%AC%D9%88%D8%A7%D8%A8-%D9%87%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%AB%D8%A8%D8%AA-%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%D8%A7%D8%AA)

asadegha
پنج شنبه 26 آبان 1390, 22:32 عصر
سلام دوستان. دستتون درد نکنه. اطلاعاتتون مفید بود.
خانوم haniyehghassami (http://barnamenevis.org/member.php?143856-haniyehghassami) تو گوگل سرچ کردم چیزی گیر نیاوردم. دیتابیسم خراب شد دوباره درست کردم خوب شد.

آقای ATili.Nero (http://barnamenevis.org/member.php?126069-ATili.Nero) حرف شما متین. منم برای کار با دیتا بیس از کلاس استفاده میکنم. ولی می خواستم بهترین شیوه رو بدونم که دوستان زحمتشو کشیدن.

haniyehghassami
پنج شنبه 26 آبان 1390, 22:56 عصر
\والا این جور که میفهمم میگم:


A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.

این میگه یا فبلا دیتابیسی به این نام وجود داشته یا اینکه فایل انتخابیتون را باز نمیکنه یا یه چیزی شبیه شبکه را داره میگه.فک کنم کلا فایلتون خراب شده


This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure
واسه این حالت هم اینا رو پیداشون کردم شاید مفید باشن



f you want to attach a MDF without LDF you can follow the steps below It is tested and working fine

Create a new database with the same name and same MDF and LDF files

Stop sql server and rename the existing MDF to a new one and copy the original MDF to this location and delete the LDF files.

Start SQL Server

Now your database will be marked suspect 5. Update the sysdatabases to update to Emergency mode. This will not use LOG files in start up

Sp_configure "allow updates", 1 go Reconfigure with override GO Update sysdatabases set status = 32768 where name = "BadDbName" go Sp_configure "allow updates", 0 go Reconfigure with override GO

Restart sql server. now the database will be in emergency mode

Now execute the undocumented DBCC to create a log file

DBCC REBUILD_LOG(dbname,'c:\dbname.ldf') -- Undocumented step to create a new log file.

(replace the dbname and log file name based on ur requirement)

Execute sp_resetstatus

Restart SQL server and see the database is online.



این لینک (http://yrushka.com/index.php/database-recovery/sql-20052008-log-file-deleted-part-3-2/) هم یه نگاهی بندازین

he1234
پنج شنبه 26 آبان 1390, 23:13 عصر
نمونه ای از کار با دیتابیس البته با اکسس که فرق چندانی با sql نداره تنها به جای OleDbConnection از sqlConnection استفاده کنید

shahrzad87
جمعه 27 آبان 1390, 10:40 صبح
سلام دوستان
اگر علاقه دارین EntityFrameWork رو یاد بگیرین، پیشنهاد می کنیم توی پروژه

کارگاه عملی : ساخت پروژه ثبت سفارشات مرحله به مرحله (http://barnamenevis.org/showthread.php?313523-%DA%A9%D8%A7%D8%B1%DA%AF%D8%A7%D9%87-%D8%B9%D9%85%D9%84%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%AB%D8%A8%D8%AA-%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%D8%A7%D8%AA-%D9%85%D8%B1%D8%AD%D9%84%D9%87-%D8%A8%D9%87-%D9%85%D8%B1%D8%AD%D9%84%D9%87)

شرکت کنید و از تایپیک
سوال و جواب های ساخت پروژه ثبت سفارشات (http://barnamenevis.org/showthread.php?313524-%D8%B3%D9%88%D8%A7%D9%84-%D9%88-%D8%AC%D9%88%D8%A7%D8%A8-%D9%87%D8%A7%DB%8C-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%AB%D8%A8%D8%AA-%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%D8%A7%D8%AA/page3)

نمونه کدها رو دانلود کنید و بخونید، کد خودتون و نظرتون رو هم بنویسین. من خودم پروژه رو با EntityFrameWork و ساده نوشتم، بخونینش و اگر سوالی داشتین بپرسین براتون توضیح می دم.


قرار هست که آقای gwbasic (http://barnamenevis.org/member.php?25140-gwbasic) یک ویدیو آموزشی و کد نهایی رو با EntityFrameWork‌ در تایپیک پروژه بذارند.