ورود

نسخه کامل مشاهده نسخه کامل : یه سوال در مورد بانک های اطلاعاتی



aliaghaaaaa
04-09-2009, 17:39
سلام.
من یه سوال دارم که قبلا ازتون پرسیده بودم ولی جواب درستی نگرفتم.
می خواستم یه بار دیگه مطرحش کنم. شاید جواب گرفتم.
در کل لطفا در این مورد هر چی می دونید بهم بگید.

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


من با استفاده از کد زیر به بانک اطلاعاتی connect می شم.
تا وقتی توی برنامه هستم، هر تغییری توی برنامه بدم کارش رو درست انجام میده. مثلا از طریق برنامه، چندتا داده رو به اطلاعاتی برنامه اضافه می کنم.
برنامه هیچ پیغام خطایی نمی ده و دقیقا کارش رو درست انجام میده.


مشکل من اینجاست که اگه برنامه بسته بشه، اطلاعاتی که توی بانک اطلاعاتی ثبت کردم و یا پاک کردم، به حالت اولشون بر می گردن و انگار نه انگار که من توی بانک، تغییرات داده بودم.

کد:

string MdfPath = Environment.CurrentDirectory + @"\Database1.mdf";
string ConnectionString = string.Format(@"Data Source = .\SQLEXPRESS;AttachDBFileName={0};" + "Integrated Security = SSPI;", MdfPath);
System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(ConnectionStri ng);

این در صورتی است که اگه از طریق connection string به بانک اطلاعاتی وصل بشم، این مشکل رو ندارم.
ولی اونوقت، آدرس بانک اطلاعاتی، آدرس ثابت میشه و روی هر کامپیوتری فرق میکنه.
برای بهتر حل شدن این مشکل من یه نمونه از کدهام رو براتون میذارم.
ممنون از لطف شما.


کد:

string MdfPath = Environment.CurrentDirectory + @"\Database1.mdf";
string ConnectionString = string.Format(@"Data Source = .\SQLEXPRESS;AttachDBFileName={0};" + "Integrated Security = SSPI;", MdfPath);
System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(ConnectionStri ng);
SqlCommand cmd1 = new SqlCommand("insert into factor_name(code,tel,name) values('" + code + "','" + textBox1.Text + "','" + txt_forooshandeh.Text + "')", connection);
cmd1.Connection.Open();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd1;
DataTable dt = new DataTable();
adp.Fill(dt);
add2();
cmd1.Connection.Dispose();

:41::41::41:

behnam25214
04-09-2009, 22:35
به نظر من باید در آخر هم این کد و بنویسی:10:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

MTPROG
05-09-2009, 08:42
این مشکل زیاد جدی نیست و فقط در حالت دیباگ به وجود میاد اگه شما VS رو ببندید و فایل exe رو اجرا کنید میبینید دچار مشکل نمیشه

در کل این مشکل بخاطر این اتفاق میفته که دو نمونه از بانک در سیستم وجود داره که هنگام دیباگ یکیش کار میکنه و هنگام اجرای فایل exe اونی که کنار فایل گذاشتید کار میکنه
احتمالا تو این دو مسیر فایل وجود داشته باشه
C:\Applicatiion\db.mdf
C:\Applicatiion\bin\Debug\db.mdf
که هنگام دیباگ گیری مسیر اولو میخونه و هنگام ستاپ گیری و فایل exe مسیر دوم

شما برنامه تون trace کنید ببینید که کد
Environment.CurrentDirectory + @"\Database1.mdf
کجا رو میخونه میتونید منبع مشکل رو پیدا کنید

در ضمن میتونید به جای استفاده از Environment.CurrentDirectory + @"\Database1.mdf از کد زیر هم استفاده کنید
My.Application.Info.DirectoryPath + "\Database1.mdf"

aliaghaaaaa
05-09-2009, 10:22
سلام.
من کد: cmd1.Connection.Close(); رو هم قبلا امتحان کرده بودم ولی باز هم جواب نداد.

کد: My.Application.Info.DirectoryPath + "\Database1.mdf" مربوط به ویژوال هست. لطفا معادل سی شارپ رو بگین.
در ضمن من چطور می تونم برنامه رو trace کنم؟


ممنون.

MTPROG
05-09-2009, 12:35
کد: My.Application.Info.DirectoryPath + "\Database1.mdf" مربوط به ویژوال هست. لطفا معادل سی شارپ رو بگین

Application.StartupPath+ "\Database1.mdf";


در ضمن من چطور می تونم برنامه رو trace کنم؟




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

در ضمن میتونی محتویات متغییر تو MessageBox ببینی
MessageBox.Show(Application.StartupPath);
MessageBox.Show(Environment.CurrentDirectory + @"\Database1.mdf
);

aliaghaaaaa
05-09-2009, 17:18
سلام.
مشکل قبلی من حل شد.
وقتی از تو debug برنامه رو اجرا کردم، ثبت کرد و درست شد.
حالا یه مشکل دیگه هست و اون اینه که رو بعضی از کامپیوترها بانک اطلاعاتی رو میشناسه و رو بعضی دیگه هم نمیشناسه.
البته رو همه ی کامپیوترهایی که امتحان کردم هم دات نت بود و هم sql.
یه error میده و میگه:
creat database permission denied in database 'master'.
an attempt to attach an auto-named database for " آدرس بانک " failed. a database with the same name exist, or specified cannot be opened or it is located on UNC share.
البته اون آدرسی هم که می نویسه کاملا درسته.
کمک...........

MTPROG
06-09-2009, 08:41
آیا فایل بانک شما تو سیستم خودتون Attach شده بود اگر اینطوری باید حتما اول deattch بشه بعد برشداری
اگر تو سیستم خودتو تو محیط VS یک Connection باز از بانک داری اونو ببند یا حذف کن

اگر این خطا تو محیط ویستا و سیون (7) برات پیش اومده علتش اینه که اجازه دسترسی به اون فایل توسط ویندوز بسته شده باید به اون اجازه دسترسی بدی

روی فایل بانک اطلاعاتی کلیک راست کن گزینه Properties وبعد..
Properties-->Security Tab-->Select User-->Edit Button-->Check Full Control

aliaghaaaaa
06-09-2009, 08:59
سلام.
من از گزینه ی add گزینه ی sql database رو انتخاب کردم و برای برنامه بانک اطلاعاتی درست کردم.
حالا این مشکل رو دارم.

MTPROG
06-09-2009, 09:11
روشی رو که گفتم تست کنید ؟

aliaghaaaaa
06-09-2009, 12:05
سلام.
ممنون.
امتحانش می کنم اگه بازم مشکلی داشتم می پرسم.
لطف کردین