PDA

View Full Version : سوال: خطا در add کردن داده در بانک



mehran63
سه شنبه 26 بهمن 1389, 17:02 عصر
با سلام
در کد زیر مخواستم داده ها را در بانک اضافه کنم ولی خطا میگیره که پیغام خطا را در زیر گذاشتم


















private void FillDataSetAndView()

{

objDataSet = new DataSet();

objDataAdapter.Fill(objDataSet, "tbuy");

objDataView = new DataView(objDataSet.Tables["tbuy"]);

objCurrencyManager = (CurrencyManager)

(this.BindingContext[objDataView]);

}// end method FillDataSetAndView

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

private void ShowPosition()

{

try

{

txtPrice.Text = decimal.Parse(txtPrice.Text).ToString("##0.00");

}// end try

catch(System.Exception e)

{

txtPrice.Text = "0";

txtPrice.Text = decimal.Parse(txtPrice.Text).ToString("##0.00");

}// end catch

private void btnAdd_Click(object sender, EventArgs e)

{

int intPosition;

intPosition = objCurrencyManager.Position;

objCommand=new SqlCommand();

objCommand.Connection = objConnection;

objCommand.CommandText = "insert into tbuy" +

"valuse(@code,@name,@model,@manufacturer,@sn,@count ry," +

"@price,@count,@date,@description)";

objCommand.Parameters.AddWithValue("code", txtCode).DbType = DbType.Int32;

objCommand.Parameters.AddWithValue("name", txtName);

objCommand.Parameters.AddWithValue("model", txtModel);

objCommand.Parameters.AddWithValue("manufacturer", txtManufacturer);

objCommand.Parameters.AddWithValue("sn", txtSN).DbType = DbType.Int32;

objCommand.Parameters.AddWithValue("country", txtCountry);

objCommand.Parameters.AddWithValue("price", txtPrice).DbType = DbType.Int32;

objCommand.Parameters.AddWithValue("count", txtCount).DbType = DbType.Int32;

objCommand.Parameters.AddWithValue("date", txtDate);

objCommand.Parameters.AddWithValue("description", txtDescription);

objConnection.Open();

try

{

objCommand.ExecuteNonQuery();

}// end try

catch(SqlException sqlExceptionErr)

{

MessageBox.Show(sqlExceptionErr.Message);

}// end catch

objConnection.Close();

FillDataSetAndView();

BindFields();

objCurrencyManager.Position = intPosition;

ShowPosition();

toolStripStatusLabel1.Text = "Record Added";

}// end method btnAdd_Click






















ولی در خط objCommand.ExecuteNonQuery() پیغام خطای
Failed to convert parameter value from a TextBox to a Int32. را میدهد و اگرDbType = DbType.Int32را از جلوی داده هایی که به صورت عدد وارد میشوند بردارم پیغام خطای زیر را میدهد
No mapping exists from object type System.Windows.Forms.TextBox to a known managed provider native type

صادق صدقی
سه شنبه 26 بهمن 1389, 17:48 عصر
cmd.Parameters.Add("@Name", SqlDbType.Int).Value = Convert.ToInt32(TextBox.Text);



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

mehran63
پنج شنبه 28 بهمن 1389, 17:17 عصر
سلام
متوجه اين کدي که نوشتيد نميشم لطفا دقيقتر راهنماييم کنيد که داده هاي عددي و غير عددي رو چطور از تکست باکس به بانک اضافه کنم
چندتا نمونه برنامه هم نگاه کردم ولي هر کدوم به يک روشي اين کار رو انجام داده بودن که من متوجه نشدم
متشکر ميشم اگه با توجه به کد خودم کمکم کنيد اگه قسمت اضافه کردن داده ها به بانک برنامه رو هم دقيقا و کامل برام گذاشتيد که اون رو کپي کنم تو برنامم تا از روي اون ياد بگيرم ممنون ميشم

payman_xxp
پنج شنبه 28 بهمن 1389, 18:57 عصر
سلام
اینارو اصلاح کن همشونو:


objCommand.Parameters.AddWithValue("@name", txtName);

باید @ بزاری.
موفق باشید.

mehran63
پنج شنبه 28 بهمن 1389, 22:11 عصر
متشکرم دوست عزیز این اشتباه رو هم رفع کردم ولی باز هم همون دو پیام خطا رو در دو حالت متفاوتی که در تایپیک اول اشاره کردم میده
لطفا راهنماییم کنید

صادق صدقی
پنج شنبه 28 بهمن 1389, 22:30 عصر
cmd.Parameters.Add("@نام پارامتر", SqlDbType.Int).Value = Convert.ToInt32(TextBox.Text);
//SqlDbType.Int >>>Noe Parameter >>Masalan Bigint ya DateTime Ya Nvarchar
//.Value = Convert.ToInt32(TextBox.Text); >>>az inja be bad ersale meghadr ast

//اگرنوع پارامتر عددی است باید عدد بفرستیم از نوع مثلا اینت 32 یا 64
//Convert.ToInt32(TextBox.Text) این دستور هم برای تبدیل کردن رشته ی تکست باکس به عدد اینت 32 است

دیگه فکر نکنم جایه ابهامی مونده باشه

mohsen.nsb44
پنج شنبه 28 بهمن 1389, 23:04 عصر
دوست عزیز از کد زیر استفاده کن اگه جایی رو متوجه نشودی بگو توضیح بدم

con = new SqlConnection();

con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Documents and Settings\Mohsen\My Documents\Visual Studio 2008\Projects\TellBook\TellBook\TellDb.mdf;Integra ted Security=True;User Instance=True";
con.Open();
cmd = new SqlCommand();
cmd.Connection = con;
string sql = "insert into tbname(name,family)";
sql += "values(N'{0}',N'{1}')";
sql = string.Format(sql, txtName.Text, txtFamily.Text, txtAdresHome.Text, txtAdresWork.Text, txtCodeposty.Text, txtEmail.Text, txtTellHome.Text, txtTellWork.Text, TxtMobile.Text, txtTozihat.Text);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
con.Close();

payman_xxp
پنج شنبه 28 بهمن 1389, 23:43 عصر
متشکرم دوست عزیز این اشتباه رو هم رفع کردم ولی باز هم همون دو پیام خطا رو در دو حالت متفاوتی که در تایپیک اول اشاره کردم میده
لطفا راهنماییم کنید


سلام
اینارو اصلاح کن همشونو:
کد:


objCommand.Parameters.AddWithValue("@name", txtName);
باید @ بزاری.
موفق باشید.



سلام
من فکر کردم txtName ورودی تابع هستش :اشتباه:
تازه دیدم، اینا باید خوده کنترلها باشن درسته؟ بخاطر همین خطا میده.
AddWithValue هارو اینجوری اصلاح کن:

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.ToInt32(txtPrice.Text));

objCommand.Parameters.AddWithValue("@count", Convert.ToInt32(txtCount.Text));

objCommand.Parameters.AddWithValue("@date", txtDate.Text);

objCommand.Parameters.AddWithValue("@description", txtDescription.Text);


موفق باشید.

mehran63
جمعه 29 بهمن 1389, 10:42 صبح
سلام
باتشکر از دوستان مشکل بعدی هم رفع شد که باید خاصیت text را به textbox میدادم
1- چگونه میتوانم وقتی داده ها را اضافه یا delete کردم در همان زمان این تغییرات را در grid view فرم داشته باشم
2 - چگونه جلوی ورود رکورد تکراری را بگیرم

payman_xxp
شنبه 30 بهمن 1389, 07:51 صبح
سلام
باتشکر از دوستان مشکل بعدی هم رفع شد که باید خاصیت text را به textbox میدادم
1- چگونه میتوانم وقتی داده ها را اضافه یا delete کردم در همان زمان این تغییرات را در grid view فرم داشته باشم
2 - چگونه جلوی ورود رکورد تکراری را بگیرم

سلام
دوست من ،بارها تاپیک زده شده و در این موارد بحث شده.
لطفا سرچ کنید، مطالب رو مرور کنید، اگر موردی موند در خدمتیم.
موفق باشید.

mehran63
شنبه 30 بهمن 1389, 12:55 عصر
سلام
دوست عزیز سرچ کردم تنها کدی که پیدا کردم کد زیر بود که کار هم نکرد

catch (Exception ex)
{
if (ex.Message == "Violation of PRIMARY KEY constraint 'PK_code'. Cannot insert duplicate key in object 'dbo.tbuy'.The statement has been terminated.")
{
toolStripStatusLabel1.Text = "کد تکراری است";
return;
}

sherek_hrm
شنبه 30 بهمن 1389, 15:05 عصر
سلام. معذرت میخوام اینجا دارم مینویسم. نمیدونستم کجا باید این سوالم رو مطرح کنم. گفتم اینجا که مربوط به sql هستش بنویسم.
من وقتی توی c# میخوام دیتابیسم رو add کنم، وقتی سرور رو مشخص میکنم، دیتابیسمم انتخاب میکنم و Ok رو میزنم، این اخطار رو بهم میده:
this server version is not supported. only servers up to microsoft sql server 2005 are supported.
این رو هم بگم که sql 2008 دارم و اول اون رو نصب کردم و بعدش visual studio 2008 رو

mehran63
شنبه 30 بهمن 1389, 23:57 عصر
سلام
شاید نسخه express رو نصب کردی

mehran63
دوشنبه 02 اسفند 1389, 10:49 صبح
اساتید گرامی منتظر راهنماییتان هستم :متفکر::متفکر::متفکر:

mehran63
سه شنبه 03 اسفند 1389, 10:29 صبح
لطفا اگه کسی راه حلی داره کمکم کنه