PDA

View Full Version : چرا وقتی توی دیتا ست تغییری ایجاد می کنیم پروزه به هم می ریزه



h_jafarnezhad
پنج شنبه 10 اسفند 1391, 11:04 صبح
با سلام توی دیتا ست پروژه یه جدول برای کاربر دارم وقتی یه query جدید برای اپدیت به عنوان مثال برای ذخیره رمز عبور جدید یه query اضافه می کنم کل پروژه به هم می ریزه .

h_jafarnezhad
پنج شنبه 10 اسفند 1391, 12:25 عصر
کسی نیست به من کمک کنه

ali.bahrami
پنج شنبه 10 اسفند 1391, 12:29 عصر
سلام دوست عزیز سوالتون یکم نامفهومه .. یعنی چه جوری میشه ؟ چی بهم میریزه ؟
اگر شکلی ، کدی چیزی بزارین سریعتر میشه به جواب رسید

h_jafarnezhad
پنج شنبه 10 اسفند 1391, 13:14 عصر
جدیدا وقتی یه جدول به دیتا ست اضافه می کنم یا تغییری تو جداول موجود می دم از تمام کد های مربوط به بانک که توی پروژه هست خطا می گیره
به عنوان مثال این یکی از خطا هاست
Error 57 The type name 'pdperDataTable' does not exist in the type 'my_project.torsysdbDataSetTableAdapters.torsysdbD ataSet' E:\my project\my project\torsysdbDataSet1.Designer.cs 12226 51 my project

که مربوط به این کد میشه
publicvirtualint Update(torsysdbDataSet.pdperDataTable dataTable) {
returnthis.Adapter.Update(dataTable);
}

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

veniz2008
پنج شنبه 10 اسفند 1391, 13:26 عصر
سلام.
احتمالا بعد از اضافه کردن مقدار جدید، دیتاست شما بروز نمیشه (حالت استاتیک داره). دیتاست رو حذف کنید و از نو یک دیتاست ایجاد کنید تا تمام موارد جدید هم در اون لحاظ بشه.

ali.bahrami
پنج شنبه 10 اسفند 1391, 14:08 عصر
منم با نظر دوست خوبمون veniz2008 موافقم

h_jafarnezhad
شنبه 12 اسفند 1391, 11:14 صبح
سلام.
احتمالا بعد از اضافه کردن مقدار جدید، دیتاست شما بروز نمیشه (حالت استاتیک داره). دیتاست رو حذف کنید و از نو یک دیتاست ایجاد کنید تا تمام موارد جدید هم در اون لحاظ بشه.

مشکل اینجاست که دیتا سیت رو حذف می کنم و دوباره تمام تنظیمات رو انجام میدم ولی بازم همین طوری میشه .خیلی برام عجیبه قبلا این مشکل رو نداشت.
یه سوال دیگه هم دارم چه طوری میشه بانک اطلاعاتیم رو قابل حمل کنم یعنی وقتی پروژه رو یه سیستم دیگه اجرا میکنم نیاز به تغییر کد های مربوط به connection string نداشته باشم.
و همچنین وقتی پروژه تموم شد و setup کردم نیاز به نصب sql server توی سیستم مقصد نباشه.

veniz2008
شنبه 12 اسفند 1391, 11:31 صبح
مشکل اینجاست که دیتا سیت رو حذف می کنم و دوباره تمام تنظیمات رو انجام میدم ولی بازم همین طوری میشه .خیلی برام عجیبه قبلا این مشکل رو نداشت.

تو پنجره solution ، روی نام پروژه راست کلیک و ReBuild رو بزنید. شاید فایل exe برنامه بروز نشده باشه که با این کار از نو ساخته میشه.

یه سوال دیگه هم دارم چه طوری میشه بانک اطلاعاتیم رو قابل حمل کنم یعنی وقتی پروژه رو یه سیستم دیگه اجرا میکنم نیاز به تغییر کد های مربوط به connection string نداشته باشم.برای اتچ کردن دیتابیس روی سیستم جدید یا باید بصورت دستی خودتون اتچ کنید یا اتچ رو اتوماتیک کنید.
برای اتچ اتومات کانکشن استرینگ رو بصورت زیر بنوسید :


"Data Source=(local)\\SQLEXPRESS;AttachDbFilename=|DataD irectory|\\YourDataBaseName.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";


و همچنین وقتی پروژه تموم شد و setup کردم نیاز به نصب sql server توی سیستم مقصد نباشه.
کافیه نسخه Express از همون ورژن (یا بالاتر) رو نصب کنی.میتونید موقع ساخت setup نسخه express رو به setup اضافه کنید. مثلا اگر در برنامه شما sql server 2008 استفاده شده کافیه نسخه express 2008 (میتونید نسخه اکسپرس بالاتر هم نصب کنید).

h_jafarnezhad
شنبه 12 اسفند 1391, 11:48 صبح
[QUOTE=veniz2008;1713081]تو پنجره solution ، روی نام پروژه راست کلیک و ReBuild رو بزنید. شاید فایل exe برنامه بروز نشده باشه که با این کار از نو ساخته میشه.
برای اتچ کردن دیتابیس روی سیستم جدید یا باید بصورت دستی خودتون اتچ کنید یا اتچ رو اتوماتیک کنید.
برای اتچ اتومات کانکشن استرینگ رو بصورت زیر بنوسید :


"Data Source=(local)\\SQLEXPRESS;AttachDbFilename=|DataD irectory|\\YourDataBaseName.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";


اسم بانک پروژه من torsysdb هست و داخل پوشه پروژه یک پوشه با نام db هست که فایل بانک اونجا قرار داره میشه لطف کنید و بگید دقیقا تو کدی که فرستادین غیر از نام بانک چه قسمت هایی رو باید تغییر بدم

veniz2008
شنبه 12 اسفند 1391, 12:01 عصر
[QUOTE=veniz2008;1713081]
اسم بانک پروژه من torsysdb هست و داخل پوشه پروژه یک پوشه با نام db هست که فایل بانک اونجا قرار داره میشه لطف کنید و بگید دقیقا تو کدی که فرستادین غیر از نام بانک چه قسمت هایی رو باید تغییر بدم
اگر میخواید از روش اتچ اتومات استفاده کنید کافیه که فایل های دیتابیس (mdf و ldf ) رو به پوشه دیباگ منتقل کنید و از کانکشنی که گذاشتم استفاده کنید. برنامه در اولین اجرا زمانیکه به کد کانکشن استرینگ میرسه، دیتابیس رو بصورت خودکار اتچ میکنه.

Data Source=(local)\\SQLEXPRESS;AttachDbFilename=|DataD irectory|\\torsysdb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

h_jafarnezhad
شنبه 12 اسفند 1391, 12:19 عصر
[QUOTE=h_jafarnezhad;1713100]
اگر میخواید از روش اتچ اتومات استفاده کنید کافیه که فایل های دیتابیس (mdf و ldf ) رو به پوشه دیباگ منتقل کنید و از کانکشنی که گذاشتم استفاده کنید. برنامه در اولین اجرا زمانیکه به کد کانکشن استرینگ میرسه، دیتابیس رو بصورت خودکار اتچ میکنه.

Data Source=(local)\\SQLEXPRESS;AttachDbFilename=|DataD irectory|\\torsysdb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

الان من باید خود کانکشن رو به بانک موجود توی debug وصل کنم یا به بانک توب پوشه db

veniz2008
شنبه 12 اسفند 1391, 12:45 عصر
اگر بصورت کدنویسی کانکشن ساختید که کافیه کد بالا رو که براتون گذاشتم در برمامتون قرار بدید. ولی اگر کانکشن رو بصورت ویزاردی ساختید (مثلا یه گرید گذاشتید و بصورت ویزاردی به دیتابیس وصل کردید) قاعدتا خطا میده چون بعد از انتقال دیتابیس به پوشه debug ، مسیر تغییر میکنه و گرید دیگه نمیتونه مسیر قبلی رو برای اتصال به دیتابیس پیدا کنه.

h_jafarnezhad
شنبه 12 اسفند 1391, 13:00 عصر
اگر بصورت کدنویسی کانکشن ساختید که کافیه کد بالا رو که براتون گذاشتم در برمامتون قرار بدید. ولی اگر کانکشن رو بصورت ویزاردی ساختید (مثلا یه گرید گذاشتید و بصورت ویزاردی به دیتابیس وصل کردید) قاعدتا خطا میده چون بعد از انتقال دیتابیس به پوشه debug ، مسیر تغییر میکنه و گرید دیگه نمیتونه مسیر قبلی رو برای اتصال به دیتابیس پیدا کنه.

من تمام تنظیماتی که کفتید اضافه کردم مسیر کانکشن رو هم تغییر دادم و مسیر فعلی کانکشن
Data Source=.;AttachDbFilename="E:\my project\my project\bin\Debug\torsysdb.mdf";Integrated Security=True
اینه ولی باز هم خطا میده.
متن خطا اینه:
Invalid value for key 'attachdbfilename'.
و به خطا صورتی از کدی که در پایین می بینین اشاره می کنه
من یه کلاس به نام DataAccess.cs دارم که شامل کد های زیر میشه

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace my_project
{
class DataAccess
{
SqlConnection con;
SqlCommand cmd;
SqlDataAdapter da;
public DataAccess()
{
con = new SqlConnection();
cmd = new SqlCommand();
da = new SqlDataAdapter();
cmd.Connection = con;
da.SelectCommand = cmd;
}
public void Connect()
{
string cs = @"Data Source=(local)\\SQLEXPRESS;AttachDbFilename=|DataD irectory|\\torsysdb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
;
con.ConnectionString = cs;
con.Open();
}
public void DisConnect()
{
con.Close();
}
public DataTable Select(string sql)
{
DataTable dt = new DataTable();
cmd.CommandText = sql;
da.Fill(dt);
return dt;
}
public void DoCommand(string sql)
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
}
-

veniz2008
شنبه 12 اسفند 1391, 13:16 عصر
کاری که شما باید انجام بدی اینه :
فایل های دیتابیس رو دیتچ کیند و به پوشه debug انتقال بدید.
بعدش چون فایل دیتابیس شما کنار دست فایل اجرایی قرار میگیره دیگه نیازی به ذکر نام درایو نیست.(فایل اجرایی و دیتابیس با هم همسایه میشن و نیازی به ذکر ادرس ندارید). دقیقا به همون شکلی استفاده کنید که واستون گذاشتم.

h_jafarnezhad
شنبه 12 اسفند 1391, 13:59 عصر
کاری که شما باید انجام بدی اینه :
فایل های دیتابیس رو دیتچ کیند و به پوشه debug انتقال بدید.
بعدش چون فایل دیتابیس شما کنار دست فایل اجرایی قرار میگیره دیگه نیازی به ذکر نام درایو نیست.(فایل اجرایی و دیتابیس با هم همسایه میشن و نیازی به ذکر ادرس ندارید). دقیقا به همون شکلی استفاده کنید که واستون گذاشتم.


تمام این مراحل رو انجام دادم .یه سوال پیش میاد من کانکشن رو از طریق ویزارد ایجاد کردم و مسیرش
Data Source=.;AttachDbFilename="E:\my project\my project\bin\Debug\torsysdb.mdf";Integrated Security=True
و خطایی که تو تاپیک قبل کفتم رو میده .حالا باید چه کاری انجام بدم تا درست بشه