PDA

View Full Version : سوال: مشکل در ویرایش و ثبت اطلاعات



MINA B
دوشنبه 30 تیر 1393, 23:05 عصر
سلام دوستان من یه فرم دارم مربوط به ویرایش اطلاعات کاربر میخوام یه جوری اطلاعات آپدیت بشه که کاربر اجازه داشته باشه کد ملی خودش رو -که تو پایگاه شناسه است -ویرایش کنه وقتی کد ملی رو عوض می کنم طبق کد دوم پیغام خطا میاد و حتی اگه کد ملی رو به حالت اول برگردونم و بخوام اطلاعات دیگه رو ویرایش کنم با error خارج میشه

private void button2_Click(object sender, EventArgs e) {


if (textBox1.Text == "" || textBox2.Text == "" || textBox4.Text == "" || textBox7.Text == "" || textBox9.Text == "")
{
MessageBox.Show("پر کردن موارد ستاره دار الزامی است");


}


else
{
db.Update_Kharidar(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, textBox6.Text, textBox7.Text, textBox8.Text, textBox9.Text);

}
اینم دستور sql

public void Update_Kharidar(string name, string family, string namepedar, string codemelli, string codeshenasnameh, string mahalsodoor, string phone, string mobile, string address) {
this.Open();
string sql = "update tbl_kharidar set Name=@name,Family=@family,Namepedar=@namepedar,Cod emellikh=@codemelli,Codeshenasnameh=@codeshenasnam eh,Mahalsodoor=@mahalsodoor,Phone=@phone,Mobile=@m obile,Address=@address where Codemellikh=@codemelli ";
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@name", name);
cmd.Parameters.AddWithValue("@family", family);
cmd.Parameters.AddWithValue("@namepedar", namepedar);
cmd.Parameters.AddWithValue("@codemelli", codemelli);
cmd.Parameters.AddWithValue("@codeshenasnameh", codeshenasnameh);
cmd.Parameters.AddWithValue("@mahalsodoor", mahalsodoor);
cmd.Parameters.AddWithValue("@phone", phone);
cmd.Parameters.AddWithValue("@mobile", mobile);
cmd.Parameters.AddWithValue("@address", address);


if (cmd.ExecuteNonQuery() == 1)
{
MessageBox.Show("ویرایش اطلاعات با موفقیت انجام گردید");
cmd.Parameters.Clear();
}
else
{
MessageBox.Show("خطا");
}
this.Close();
}
تو رو خدا به دادم برسید :گریه:

MINA B
دوشنبه 30 تیر 1393, 23:15 عصر
و اما فرم ثبت چکار کنم که از درج اطلاعات تکراری جلوگیری کنم خواستم با for برای ستون های دیتا گرید ویو بنویسم اما نمی دونم شرط ها رو چطوری قرار بدم که هم اگه سطرهای ستاره دار خالی بود پیغام بده هم از درج رکورد تکراری جلوگیری کنه بعد اگه اینا برقرار بود دستور insert رو اجرا کنه
private void button1_Click(object sender, EventArgs e) {


if (textBox1.Text == "" || textBox2.Text == "" || textBox4.Text == "" || textBox7.Text == "" || textBox9.Text == "")
{
MessageBox.Show("پر کردن موارد ستاره دار الزامی است");
}
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (textBox4.Text == dataGridView1.Rows[i].Cells[0].Value.ToString())
{
MessageBox.Show("خطا:این کد ملی قبلا ثبت شده است");
return;
}




db.Insertkharidar(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, textBox6.Text, textBox7.Text, textBox8.Text, textBox9.Text);
dataGridView1.DataSource = db.Kharidartable();


}

}
لطفا کمک کنید هر چی گشتم راه حل پیدا نکردم.

ashkufaraz
دوشنبه 30 تیر 1393, 23:33 عصر
متن خطایی که میده رو اینجا قرار بده تا بدونیم خطا برای چیه؟احتمالا چون کدملی رو کلید اصلی تعریف کردید خطا می ده. برای جلوگیری از درج تکرار همین کدی که نوشتی که اگر کد ملی بود داخل گرید return کن درست اجرا نمی شه؟ این کد هم خالی بودن رو بررسی می کنه هم تکرار نبودن کد ملی

MINA B
دوشنبه 30 تیر 1393, 23:49 عصر
بله کد ملی رو کلید اصلی قرار دادم اما میخوام کاربر اجازه ی ویرایش رو داشته باشه .در مورد کد دوم دستوراتم ع هنوز درست چیده نشده.مشکل منم همینه که نمیدونم چطوری کدها رو کنار هم قرار بدم که اول بررسی کنه خالی نباشه بعد بررسی کنه تکراری نباشه اگه هر دو برقرار بود دو خط آخر رو اجرا کنه کد من این دو تا رو بررسی میکنه اما درجم صورت میگیره چون برنامه خط به خط اجرا میکنه میره تا آخر
اینم error
The variable name '@name' has already been declared. Variable names must be unique within a query batch or stored procedure.
همونطور که گفتم اگه بعد از پیغام خطایی توی کدم هست کد ملی رو به حالت اول برگردونم و بخوام مثلا اسم رو عوض کنم این error میاد
ببخشید طولانی شد.

ashkufaraz
سه شنبه 31 تیر 1393, 01:46 صبح
خوب یک فیلد id انتخاب کن که به طور اتوماتیک اضافه بشه و کدملی رو از حالت کلید خارج کن. if (textBox1.Text == "" || textBox2.Text == "" || textBox4.Text == "" || textBox7.Text == "" || textBox9.Text == "")
{
MessageBox.Show("پر کردن موارد ستاره دار الزامی است");
return;
}
Boolean exist = false;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (textBox4.Text == dataGridView1.Rows[i].Cells[0].Value.ToString())
{
MessageBox.Show("خطا:این کد ملی قبلا ثبت شده است");
exist = true;
break;
}

}
if (exist == false)
{
db.Insertkharidar(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, textBox6.Text, textBox7.Text, textBox8.Text, textBox9.Text);
dataGridView1.DataSource = db.Kharidartable();

}

MINA B
سه شنبه 31 تیر 1393, 12:53 عصر
خوب یک فیلد id انتخاب کن که به طور اتوماتیک اضافه بشه و کدملی رو از حالت کلید خارج کن. if (textBox1.Text == "" || textBox2.Text == "" || textBox4.Text == "" || textBox7.Text == "" || textBox9.Text == "")
{
MessageBox.Show("پر کردن موارد ستاره دار الزامی است");
return;
}
Boolean exist = false;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (textBox4.Text == dataGridView1.Rows[i].Cells[0].Value.ToString())
{
MessageBox.Show("خطا:این کد ملی قبلا ثبت شده است");
exist = true;
break;
}

}
if (exist == false)
{
db.Insertkharidar(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, textBox6.Text, textBox7.Text, textBox8.Text, textBox9.Text);
dataGridView1.DataSource = db.Kharidartable();

}



موقع ثبت error میده
Object reference not set to an instance of an object.nullrefrence exception was unhandled

MINA B
سه شنبه 31 تیر 1393, 13:28 عصر
میدونین مشکلش چیه؟
و این که نمیشه کد ملی هم کلید باشه هم امکان ویرایش داشته باشه؟

MINA B
سه شنبه 31 تیر 1393, 16:21 عصر
تو رو خدا این تاپیکو نیمه رها نکنید 50 درصد پروژه ی من بستگی به این دو تا مشکل داره:گریه:

juza66
سه شنبه 31 تیر 1393, 19:50 عصر
دوست عزیز دوستان دارن میگن نمیشه کلید اصلی را ویرایش کرد :! بگو خب

پیشنهادی که دوستان دادن یک id بساز بذار اتوماتیک عدد بده برای هر شماره ملی

الان که ارور میده برای تعریف یک id برای اینکه تویی پایگاه داده ات اطلاعات داری اونا رو پاک کن دوباره کلید اصلی تعریف کن مشکل حله :!

MINA B
سه شنبه 31 تیر 1393, 20:58 عصر
چشم.خیلی سخته همه ی کد هام و دیتابیسم به هم می ریزه:ناراحت: اما در مورد ارور جدا از بحث کلید اصلی چون من هنوز پایگاهم تغییر ندادم یه جای اون کده اشکال داره چون قبلا می تونستم اطلاعات ثبت کنم به شرط اون if اولیه اشکال می گیره

aghayex
سه شنبه 31 تیر 1393, 21:23 عصر
کی گفته کلید اصلی رو نمیشه ویرایش کرد . کلید اصلی کلیدی هست که باید تکراری نباشه و فقط همین . شما یه سمپل بزار حتما دوستان کمکتون می کنه

MINA B
سه شنبه 31 تیر 1393, 21:37 عصر
وای خدارو شکر. کل کدمو تو پست اول گذاشتم.

MINA B
سه شنبه 31 تیر 1393, 21:42 عصر
وقتی کد ملی رو ویرایش می کنم طبق کد زیر پیغام خطا میاد

if (cmd.ExecuteNonQuery() == 1) {
MessageBox.Show("ویرایش اطلاعات با موفقیت انجام گردید");
cmd.Parameters.Clear();
}
else
{
MessageBox.Show("خطا");
}

aghayex
سه شنبه 31 تیر 1393, 21:49 عصر
اگه در دیتابیست بین جداول از ارتباط ها استفاده کردی باید خصوصیت آپدیت رو در هر ارتباط فعال کنید تا هر زمای که یک مقدار از ستون کلید تغییر کرد در جدول دیگه هم خود به خود تغییر کنه.

MINA B
سه شنبه 31 تیر 1393, 21:51 عصر
بله از ارتباط بین جداول استفاده کردم .چطوری فعال کنم؟

MINA B
سه شنبه 31 تیر 1393, 21:52 عصر
بله از ارتباط بین جداول استفاده کردم .چطوری فعال کنم؟
sql server 2008

MINA B
سه شنبه 31 تیر 1393, 22:00 عصر
فک کنم پیدا کردم حالت آپدیت و دیلیت کلید خارجی رو رو cascade بذارم؟

aghayex
سه شنبه 31 تیر 1393, 22:14 عصر
بله باید فعال کنید

MINA B
سه شنبه 31 تیر 1393, 22:15 عصر
فک کنم پیدا کردم حالت آپدیت و دیلیت کلید خارجی رو رو cascade بذارم؟
cascade گذاشتم بازم درست نشد همون ارور اول رو میده:ناراحت:

MINA B
سه شنبه 31 تیر 1393, 22:18 عصر
cascade گذاشتم بازم درست نشد همون ارور اول رو میده:ناراحت:

The variable name '@name' has already been declared. Variable names must be unique within a query batch or stored procedure.

MINA B
سه شنبه 31 تیر 1393, 22:25 عصر
بقیه مشخصات رو اگه ویرایش کنم ارور نمی گیره اما برای کد ملی این ارور رو میده

aghayex
سه شنبه 31 تیر 1393, 23:47 عصر
شما یه سمپل بزار حتما دوستان کمکتون می کنن

MINA B
سه شنبه 31 تیر 1393, 23:56 عصر
منظورتون از سمپل چیه؟

MINA B
چهارشنبه 01 مرداد 1393, 00:11 صبح
توی این سایت http://stackoverflow.com/questions/13868128/the-variable-name-varname-has-already-been-declared-issue
یه همچین مشکلی مطرح شده که تو حلقه ی foreach بوده اما من یه همچین حلقه ای ندارم بعضی سایتام گفته بودن cmd.parameters.clear() رو جابه جا کنید که من امتحان کردم جواب نداد شایدم جای اشتباهی میذاشتمش.
توی این سایتم سه تا راه حل گفته
http://aspsnippets.com/Articles/Exception---Variable-names-must-be-unique-within-a-query-batch-or-stored-procedure.aspx
اونارم فکر می کنم رعایت کردم
این پروژه کلا با من چپه:ناراحت:

khokhan
چهارشنبه 01 مرداد 1393, 00:55 صبح
توی این سایت http://stackoverflow.com/questions/13868128/the-variable-name-varname-has-already-been-declared-issue
یه همچین مشکلی مطرح شده که تو حلقه ی foreach بوده اما من یه همچین حلقه ای ندارم بعضی سایتام گفته بودن cmd.parameters.clear() رو جابه جا کنید که من امتحان کردم جواب نداد شایدم جای اشتباهی میذاشتمش.
توی این سایتم سه تا راه حل گفته
http://aspsnippets.com/Articles/Exception---Variable-names-must-be-unique-within-a-query-batch-or-stored-procedure.aspx
اونارم فکر می کنم رعایت کردم
این پروژه کلا با من چپه:ناراحت:

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

MINA B
چهارشنبه 01 مرداد 1393, 01:34 صبح
نه چپ نیست راه کار درست نیست:لبخند: از یه طرف کدملی رو می خوای تغییر بدی از یه طرف هم ویرایش رو براساس اون انجام می دی .......................
وای واقعا ممنون که وقت گذاشتید لطف کردید. اتفاقا یه لحظه به این موضوع فک کردم اما دوباره یه حساب کتاب الکی کردم و گفتم درسته ! راهی نداره که کد ملی کلید بمونه ؟

MINA B
چهارشنبه 01 مرداد 1393, 01:47 صبح
وای واقعا ممنون که وقت گذاشتید لطف کردید. اتفاقا یه لحظه به این موضوع فک کردم اما دوباره یه حساب کتاب الکی کردم و گفتم درسته ! راهی نداره که کد ملی کلید بمونه ؟
ببخشید الان دیتابیس رو نگاه کردم و دیدم کد ملی کلید هست :لبخندساده: بازم ممنون.