PDA

View Full Version : سوال: مشکل در ذخيره اطلاعات با استفاده از تعريف db در app.config



tara1367
چهارشنبه 29 تیر 1390, 09:34 صبح
سلام دوستان من کد تعريف sqlconnection رو با استفاده از app.config تعريف کردم تا نخوام تي هر فرمي دوباره کانکشنم رو تعريف کنم ولي در زمان اجرا اطلاعات رو که ثبت مي کنم همون موقع در ديتا گريد نمايش مده ولي برنامه رو که مي بندم و دوباره باز مي کنم اطلاعات از بين رفته يعني اصلا ذخيره نشده لطفا راهنمايي بفرماييد.
با تشکر
کد بانک در app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="vam1" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\vam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>



کد تعريف کانکشن در فرم:



SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationMa nager.ConnectionStrings["vam1"].ConnectionString);

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 10:47 صبح
ببینید دیتابیس رو تو دومحل جدا نداشته باشید

منظورم تو خروجی و داخل پروژه

tara1367
چهارشنبه 29 تیر 1390, 10:55 صبح
با تشکر از راهنمايي شما
چرا دقيقا هم توي خروجي برنامه هست و هم در پوشه برنامه اصلي ، حال بايد کدوم رو حذف کنم؟

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 10:59 صبح
موقع اجرا ببینید از کانکشن خودتون استفاده میکنید یا از کانکشن ساخته شده پیش فرض vs

بهتره اول برنامه کانکشن رو خودت تنظیم کنی

tara1367
چهارشنبه 29 تیر 1390, 11:39 صبح
ببخشيد منظورتونو درست متوجه نشدم. ولي من ديتا بيس رو دستي در پوشه bin برنامه کپي کردم و در خود برنامه هم از منوي ديتا add new data source رو زدم بعد دکمه new connection گزينه microsoft sql server database file رو زدم تا connectionstring آن بصورت attchdbfilename ايجاد شود حالا نمي دونم از کدوم بايد استفاده کنم کدوم رو حذف کنم؟
با تشکر فراوان

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 11:42 صبح
اونی که تو فولدر Debug یا Release هست رو بعنوان دیتابیس انتخاب کن

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 12:04 عصر
مورد حل شد؟

tara1367
چهارشنبه 29 تیر 1390, 12:08 عصر
شرمنده اين قدر سؤال مي پرسم ولي نمي دونم چه جوري آخه من بخاطر ساخت setup براي برنامه مي خوام ديتابيس همراه نصب برنامه فايلش در کنار برنامه exe موجود باشد بخاطر همين در سورس برنامه مي خوام db اتچ شه حالا در همين تالار يه عده گفتن براي اتچ کردن بايد ديتابيس رو داخل پوشه bin کپي کنين و يه عده گفتن databasefile اون رو بسازين من هر دو کار رو کردم و براي connection اين دستور رو نوشتم اجرا ميشه ولي اطلاعات ذخيره نميشه.
با تشکر فراوان
SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\vam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 12:11 عصر
شرمنده اين قدر سؤال مي پرسم ولي نمي دونم چه جوري آخه من بخاطر ساخت setup براي برنامه مي خوام ديتابيس همراه نصب برنامه فايلش در کنار برنامه exe موجود باشد بخاطر همين در سورس برنامه مي خوام db اتچ شه حالا در همين تالار يه عده گفتن براي اتچ کردن بايد ديتابيس رو داخل پوشه bin کپي کنين و يه عده گفتن databasefile اون رو بسازين من هر دو کار رو کردم و براي connection اين دستور رو نوشتم اجرا ميشه ولي اطلاعات ذخيره نميشه.
با تشکر فراوان
SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\vam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");



این کد کانکشن


SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename= "+ Application.StartupPath+"\vam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");


برا ساخت ستاپ هم میتونی دیتارو از مسیر اجرایی برنامه اتچ کنی با کد

یا از ستاپ سازهایی مثل Wise استفاده کنی

tara1367
چهارشنبه 29 تیر 1390, 12:28 عصر
مثل کد بالا رو نوشتم اين error رو داد :
72685

Esmail Solhkhah
چهارشنبه 29 تیر 1390, 12:36 عصر
اگه میشه اون فرم رو اینجا بذارید ببینم مورد چیه

tara1367
پنج شنبه 30 تیر 1390, 09:50 صبح
برنامه رو ميزارم الان فقط مشکل اينه که پس از ثبت اطلاعات ، اطلاعات همون موقع در gridview نمايش داده مي شه ولي برنامه رو که مي بندم و باز مي کنم اطلاعات جديد ثبت نشده
با تشکر فراوان

tara1367
پنج شنبه 30 تیر 1390, 10:17 صبح
اينم سورس برنامه:
https://rapidshare.com/files/2948179609/vamsurce.rar

tara1367
پنج شنبه 30 تیر 1390, 10:52 صبح
ببخشيد موفق شدين سورس رو دانلود کنين؟

gwbasic
پنج شنبه 30 تیر 1390, 15:09 عصر
من کدتون رو دیدم ولی کاش فایل Designer فرم رو هم می دادید که بشه بررسی کرد!چندتا اشکال بزرگ بود- چرا اینقدر EventHandler- DataBase زیاد ارتباط برقرار می کردین مثلا موقع سرچو ... که کدنویسی و نگهداری رو خیلی سخت می کنه اگه مشکلی پیش بیاد چطوری هندل می کنید!!!ولی در مورد مسئله ای که مطرح کردین کدتون بنظر نمی رسه هیچ ایرادی داشته باشه ولی نکته اینجاست که وقتی شما برنامه رو Rebuild می کنید DB که تو سورستون هست به شاخه Debug ریخته می شه و این باعث می شه اطلاعات از دست بره برای اینکه مطمئن بشن برید تو شاخه debug و فایل exe رو از اونجا اجرا کنید ببنید تغییرات ذخیره می شه یا نه که اگه ذخیره می شد موضوع همونیه که گفتم پس دیگه مشکلی وجود نداره و نباید نگران باشین چون تو محیط develop این اتفاق می افتهولی برای اینکه این مسئله هم پیش نیاد یه راه نچندان خوب اینه که روی DB راست کلید کرده و Properties رو انتخاب کنید بعد Build Action رو روی none قرار بدین تا کپی نشه ولی وقتی تغییری توی DB دادین مثلا اضافه کردن فیلد یا جدول باید یادتون باشه که اونو دوباره کپی کننین

tara1367
شنبه 01 مرداد 1390, 10:29 صبح
مرسي دوست عزيز از راهنماييتون ولي من نمي خوام مدام db رو کپي کنم وقتي کد زير رو براي تعريف کانکشنم تعريف مي کنم:
SqlConnection conn = new SqlConnection(@"Server=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\vam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
اطلاعات ذخيره ميشه ولي مشکل اينه که من مي خوام کانکشن رو در app.config تعريف کنم تا در همه فرم ها با دستور زير از اون استفاده کنم:
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationMa nager.ConnectionStrings["vam1"].ConnectionString);
ولي نمي دونم چطور ميشه اين دستور رو به کد html تبديل کرد چون از @ ها اررو ميگيره
با تشکر
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="vam1" connectionString=@"Server=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\vam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

tara1367
شنبه 01 مرداد 1390, 10:33 صبح
بعد ببخشيد يک مسئله ديگه مگر اين کد search که نوشتم چه مشکلي داره که ميگيد :چرا اینقدر EventHandler- DataBase زیاد ارتباط برقرار می کردین مثلا موقع سرچو ؟
try
{
DataSet ds = new DataSet();
SqlDataAdapter da4 = new SqlDataAdapter("select * from tvam", conn);
da4.Fill(ds);
DataView dv = (ds.Tables[0].DefaultView);
dv.RowFilter = "Subject LIKE '%" + txtsubject.Text + "%'";
dataGridView1.DataSource = dv;
}
catch
{
}

gwbasic
شنبه 01 مرداد 1390, 14:00 عصر
ببینید تا حالا 17 تا پست زده شده ولی شما هنوز جوابتون رو نگرفتید این نشون می ده که دقت ندارین!!!
من گفتم که نگران ConnectionString نباشید برنامه شما بدرستی کار می کنه! تا حالا فکر کردین اگه یه نسخه از برنامه ای بخواد فروخته بشه چه فایلهایی باید داده بشه؟ جواب اینه که همه اون فایلهایی که در شاخه Debug قرار داره (البته این جواب نادقیقه ولی نیاز شما رو مرتفع می کنه) وقتی شما برنامتون رو Build می کنید فایلهای مورد نیاز از جمله DB در مسیر فولدر Debug ریخته می شه بنابراین هروقت فایل اجرایی برنامتون ، اجرا بشه همه اطلاعات توی همون فایل DB ریخته می شه و در دفعات بعد اطلاعات از دست نمی ره!!!!!! توضیحات پست قبلیمم با دقت بخونید
در ضمن تو app.Config تگ XML نوشته می شه نه Html :خجالت: و اینکه |DataDirectory| در کانفیگ یعنی همون مسیر کنار Exe یعنی همون Application.StartupPath

gwbasic
شنبه 01 مرداد 1390, 14:02 عصر
بهر حال اگه بخوان ConnectionString تون رو از یک جا بخونید وآن هم از طریق کد ، کاری نداره ، کافیه یه class بنویسی و توش یه متد بذاری که connectionString رو که یه string هست برگردونه

gwbasic
شنبه 01 مرداد 1390, 14:25 عصر
سرچ هیچ مشکلی نداره ولی بعد از اینکه داده هات رو یک بار خوندی می تونی فیلتر رو روی داده های کلاینتت بدی نه دوباره از DB بخونی
مورد دیگه Event Handler ها بود مثلا برای هر textbox یک eventHandler نوشته بودی که یه کار مشترک رو انجام می داد
با روشهای خیلی ساده می شه کدت رو به نصف کاهش داد که البته چون تازه کار هستید احتمالا اشکالی نداره ولی بهر حال کار بررسی کد رو سخت می کنه

gwbasic
یک شنبه 02 مرداد 1390, 13:35 عصر
ببخشید دوست عزیز من یه اشتباه بدی کردم بجای ست کردن Build Action به Embedded Resource باید می گفتم که Copy to output Directory را روی dont copy ست کنید تا کپی نشه embedde resource رو فراموش کنید

tara1367
شنبه 15 مرداد 1390, 11:11 صبح
دوست عزيز ممنون از راهنماييتون ولي اگر يک مثال در مورد برگدوندن connectionstring بزنيد ممنون ميشم. ببينيد من در فزم اصلي کانکشن رو به اين صورت تعريف مي کنم :
SqlConnection conn = new SqlConnection(@"Server=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + @"\vam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
حالا مي خوام ببينم چطور مشه اينو در app.config تعريف کنم.
با تشکر

tara1367
شنبه 15 مرداد 1390, 11:13 صبح
سرچ هیچ مشکلی نداره ولی بعد از اینکه داده هات رو یک بار خوندی می تونی فیلتر رو روی داده های کلاینتت بدی نه دوباره از DB بخونی
مورد دیگه Event Handler ها بود مثلا برای هر textbox یک eventHandler نوشته بودی که یه کار مشترک رو انجام می داد
با روشهای خیلی ساده می شه کدت رو به نصف کاهش داد که البته چون تازه کار هستید احتمالا اشکالی نداره ولی بهر حال کار بررسی کد رو سخت می کنه

اگر در اين مورد هم مثال بزنيد ممنون ميشم.