PDA

View Full Version : مشکل در UPDATE رکورد



mehran63
پنج شنبه 05 اسفند 1389, 11:26 صبح
برای update کد زیر رو نوشتم ولی اگر به فیلدهای که convert میشوند به int مقداری ندهم و بعد کلید update رو بزنم روی اولین خطی که این تبدیل قراره انجام بشه پیغام خطای Input string was not in a correct format. رو میدهد این در حالی است که در بانک اجازه null را دادم لطفا راهنماییم کنید چه کنم.اگر نمونه کد گذاشتید ممنون میشم


private void btnUpdate_Click(object sender, EventArgs e)
{
int intposition;
SqlCommand objCommand = new SqlCommand();
intposition = objCurrencyManager.Position;

objCommand.Connection = objConnection;
objCommand.CommandText = "update tbuy set code=@code,name=@name," +
"model=@model,manufacturer=@manufacturer,sn=@sn," +
"country=@country,price=@price,count=@count," +
"date=@date,description=@description where code=@code";
objCommand.CommandType = CommandType.Text;
objCommand.Parameters.AddWithValue("@code",
Convert.ToInt32(txtCode.Text));
objCommand.Parameters.AddWithValue("@name", txtName.Text);
objCommand.Parameters.AddWithValue("@model", txtModel.Text);
objCommand.Parameters.AddWithValue("@manufacturer",
txtManufacturer.Text);
objCommand.Parameters.AddWithValue("@sn",
Convert.ToInt32(txtSN.Text));
objCommand.Parameters.AddWithValue("@country", txtCountry.Text);
objCommand.Parameters.AddWithValue("@price",
Convert.ToDecimal(txtPrice.Text));
objCommand.Parameters.AddWithValue("@count",
Convert.ToInt32(txtCount.Text));
objCommand.Parameters.AddWithValue("@date", txtDate.Text);
objCommand.Parameters.AddWithValue("@description",
txtDescription.Text);

objConnection.Open();
objCommand.ExecuteNonQuery();
objConnection.Close();

FillDataSetAndView();
BindFields();

objCurrencyManager.Position = intposition;
ShowPosition();

toolStripStatusLabel1.Text = "Record Updated";

}// end btnUpdate_Click

Reza_Yarahmadi
پنج شنبه 05 اسفند 1389, 11:40 صبح
دوست عزیز مشکل از سمت بانک شما نیست ، #C نمیتونه مقدار خالی رو به عدد تبدیل کنه. نیازی نیست در سمت برنامه تبدیل به عدد کنه و به عنوان پارامتر بفرستید ، به همون صورت استرینگ بفرستید SQL خودش این کار رو انجام میده.

objCommand.Parameters.AddWithValue("@sn", txtSN.Text);

mehran63
یک شنبه 08 اسفند 1389, 01:12 صبح
متشکر دوست گرامی
به وسیله کد زیر کار اضافه کردن رکورد به بانک را انجام میدهم ولی وقتی روی هر رکوردی که هستم دکمه new را میزنم و اگر در فیلدهایی که به صورت عددی هستند کلید Tab روی کیبورد را بزنم تا از آن فیلد بگذرم عدد مربوط به رکوردی که در روی آن قبلا بودم در textbox ظاهر میشود در صورتی که من با زدن کلید Tab خواستم از دادن مقدار به آن فیلد صرف نظر کنم لطفا راهنماییم کنید


private void btnNew_Click(object sender, EventArgs e)
{

txtCode.Text = "";
txtCount.Text = "";
txtCountry.Text = "";
txtDate.Text = "";
txtDescription.Text = "";
txtManufacturer.Text = "";
txtModel.Text = "";
txtName.Text = "";
txtPrice.Text = "";
txtSN.Text = "";
}// end method btnAdd_Click

private void btnAdd_Click(object sender, EventArgs e)
{
int intPosition;
intPosition = objCurrencyManager.Position;
SqlCommand objCommand=new SqlCommand();
objCommand.Connection = objConnection;
objCommand.CommandText = "insert into tbuy (code,name,model," +
"manufacturer,sn,country,price,count,date,descripti on)" +
"values(@code,@name,@model,@manufacturer,@sn,@count ry," +
"@price,@count,@date,@description)";

objCommand.Parameters.AddWithValue("@code",
Convert.ToInt32(txtCode.Text));
objCommand.Parameters.AddWithValue("@name", txtName.Text);
objCommand.Parameters.AddWithValue("@model", txtModel.Text);
objCommand.Parameters.AddWithValue("@manufacturer",
txtManufacturer.Text);

objCommand.Parameters.AddWithValue("@sn",
Convert.ToInt32(txtSN.Text));
objCommand.Parameters.AddWithValue("@country", txtCountry.Text);
objCommand.Parameters.AddWithValue("@price",
Convert.ToDecimal(txtPrice.Text));
objCommand.Parameters.AddWithValue("@count",
Convert.ToInt32(txtCount.Text));
objCommand.Parameters.AddWithValue("@date", txtDate.Text);
objCommand.Parameters.AddWithValue("@description",
txtDescription.Text);

objConnection.Open();
try
{
int i=objCommand.ExecuteNonQuery();
if (i == 1)
MessageBox.Show("اطلاعات شما با موفقیت ثبت شد");
}// end try
catch (SqlException sqlExceptionErr)
{
if (sqlExceptionErr.Number == 2627)
MessageBox.Show("اين کد قبلا ثبت شده");
else
MessageBox.Show(sqlExceptionErr.Message);
}// end catch

objConnection.Close();

FillDataSetAndView();
BindFields();

objCurrencyManager.Position = intPosition;
ShowPosition();

toolStripStatusLabel1.Text = "Record Added";

}// end btnAdd_Click

mehran63
دوشنبه 09 اسفند 1389, 17:44 عصر
لطفا یکی در حل این مشکل کمک کنه

mehran63
سه شنبه 10 اسفند 1389, 11:52 صبح
مشکل قبلی رو که کسی نگفت
لطفا یکی بگه چرا تمام فیلدها update میشن به جز فیلد code سورس مربوط به update را نیز در اول تایپیک گذاشتم

Reza_Yarahmadi
سه شنبه 10 اسفند 1389, 13:00 عصر
مشکل قبلی رو که کسی نگفت
آخه سوالتون واضح نیست. مشکلی که میگید ربطی به کدی که اینجا گذاشتید نداره ، احتمال داره فیلد مورد نظر روی فرم رو به جایی بایند کرده باشید و یا شرط خاصی در طراحی اون گذاشته باشید.

لطفا یکی بگه چرا تمام فیلدها update میشن به جز فیلد code سورس مربوط به update را نیز در اول تایپیک گذاشتم
شرط آپدیت شما برابری Code است.
where code=@code
خب این شرط رکوردهایی رو پیدا میکنه که کد اونها با کد وارد شده مساوی باشه. در صورتی که قصد دارید کد رو هم تغییر بدید باید اضافه بر کد جدید ، کد قدیم رو هم داشته باشید و بصورت زیر این کار رو انجام بدید
Update tbuy Set Code = @NewCode
Where Code = @OldCode
به تکراری نبودن کد هم در صورت کلید اصلی بودن توجه داشته باشید.

mehran63
سه شنبه 10 اسفند 1389, 19:26 عصر
آخه سوالتون واضح نیست. مشکلی که میگید ربطی به کدی که اینجا گذاشتید نداره ، احتمال داره فیلد مورد نظر روی فرم رو به جایی بایند کرده باشید و یا شرط خاصی در طراحی اون گذاشته باشید.


فکر میکنید مشکل از کد زیر باشه چه طور حلش کنم

private void BindFields()
{
txtCode.DataBindings.Clear();
txtCount.DataBindings.Clear();
txtCountry.DataBindings.Clear();
txtDate.DataBindings.Clear();
txtDescription.DataBindings.Clear();
txtManufacturer.DataBindings.Clear();
txtModel.DataBindings.Clear();
txtName.DataBindings.Clear();
txtPrice.DataBindings.Clear();
txtSN.DataBindings.Clear();

txtCode.DataBindings.Add("text", objDataView, "code");
txtCount.DataBindings.Add("text", objDataView, "count");
txtCountry.DataBindings.Add("text", objDataView, "country");
txtDate.DataBindings.Add("text", objDataView, "date");
txtDescription.DataBindings.Add("text", objDataView, "description");
txtManufacturer.DataBindings.Add("text", objDataView, "manufacturer");
txtModel.DataBindings.Add("text", objDataView, "model");
txtName.DataBindings.Add("text", objDataView, "name");
txtPrice.DataBindings.Add("text", objDataView, "price");
txtSN.DataBindings.Add("text", objDataView, "sn");

toolStripStatusLabel1.Text = "Redy";
}// end method BindFields