PDA

View Full Version : update دیتابیس



elahe1393
شنبه 15 شهریور 1393, 09:05 صبح
سلام
یک لیستی از بیماران دارم که نیاز هست برای هر بیمار تنظیمات دستگاه ثبت کنم با انتخاب ستون هر بیمار و کلیک بر روی دکمه تنظیمات دستگاه کد بیمار رو به فرم جدید تنظیمات پاس میدم که بر اساس این کد بره تو جدول دیتابیس اگر برای بیمار قبلا تنظیماتی ثبت شده اونارو لود کنه در غیر این صورت فیلدها خالی باشه بعد وقتی فیلدهای تنظیمات رو پر کرد با کلیک بر روی دکمه ذخیره تنظیمات اطلاعات تو دیتابیس ذخیره بشه البته در صورتیکه تنظیماتی قبلا ثبت نشده insert کنه اگر تنظیماتی قبلا ثبت شده اونارو update کنه

فرم تنظیماتم اینه
123122

کد Insert
public void InsertDataSportDevice(Guid sportDeviceID)
{
OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\SportDatabase.accdb";

ocm.Connection = ocn;
ocm.CommandText = "INSERT INTO SportDevice (SportDeviceID, PatientCode, LeftIsEnable, LeftStartPoint, LeftEndPoint,LeftHardnessLevel,"+
"RightIsEnable, RightStartPoint, RightEndPoint, RightHardnessLevel, Reapet) VALUES(sportDeviceID,patientCode,"+
"@leftIsEnable, @leftStartPoint, @leftEndPoint, @leftHardnessLevel, @rightIsEnable, @rightStartPoint, @rightEndPoint,"+
"@rightHardnessLevel, @reapet)";
ocm.Parameters.Clear();

ocm.Parameters.AddWithValue("sportDeviceId", sportDeviceID);
ocm.Parameters.AddWithValue("patientCode", Int32.Parse(lblPatientCode.Text));
ocm.Parameters.AddWithValue("@leftIsEnable", chkLeftIsEnable.Checked);
ocm.Parameters.AddWithValue("@LeftStartPoint", txtLeftStartPoint.Text);
ocm.Parameters.AddWithValue("@LeftEndPoint", txtLeftEndPoint.Text);
ocm.Parameters.AddWithValue("@LeftHardnessLevel", txtLeftHardnessLevel.Text);
ocm.Parameters.AddWithValue("@rightIsEnable", chkRightIsEnable.Checked);
ocm.Parameters.AddWithValue("@rightStartPoint", txtRightStartPoint.Text);
ocm.Parameters.AddWithValue("@rightEndPoint", txtRightEndPoint.Text);
ocm.Parameters.AddWithValue("@rightHardnessLevel", txtRightHardnessLevel.Text);
ocm.Parameters.AddWithValue("@reapet", numUpDown.Value);

ocn.Open();
ocm.ExecuteNonQuery();
ocn.Close();

ocm.Dispose();
ocn.Dispose();
}

کد update

public void UpdateDataSetting()
{
OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "\\SportDatabase.accdb";
ocm.Connection = ocn;
ocm.CommandText = "UPDATE SportDevice SET LeftIsEnable = @leftIsEnable , LeftStartPoint = @leftStartPoint, LeftEndPoint = @leftEndPoint,"+
"LeftHardnessLevel = @leftHardnessLevel, RightIsEnable = @rightIsEnable, RightStartPoint = @rightStartPoint,"+
"RightEndPoint = @rightEndPoint, RightHardnessLevel = @rightHardnessLevel, Reapet = @reapet WHERE PatientCode = patientCode";
ocm.Parameters.Clear();

ocm.Parameters.AddWithValue("patientCode", Int32.Parse(lblPatientCode.Text));
ocm.Parameters.AddWithValue("@leftIsEnable", chkLeftIsEnable.Checked);
ocm.Parameters.AddWithValue("@LeftStartPoint", txtLeftStartPoint.Text);
ocm.Parameters.AddWithValue("@LeftEndPoint", txtLeftEndPoint.Text);
ocm.Parameters.AddWithValue("@LeftHardnessLevel", txtLeftHardnessLevel.Text);
ocm.Parameters.AddWithValue("@rightIsEnable", chkRightIsEnable.Checked);
ocm.Parameters.AddWithValue("@rightStartPoint", txtRightStartPoint.Text);
ocm.Parameters.AddWithValue("@rightEndPoint", txtRightEndPoint.Text);
ocm.Parameters.AddWithValue("@rightHardnessLevel", txtRightHardnessLevel.Text);
ocm.Parameters.AddWithValue("@reapet", numUpDown.Value);

ocn.Open();
ocm.ExecuteNonQuery();
ocn.Close();

ocm.Dispose();
ocn.Dispose();
}

حالا مشکلم اینه که وقتی به مرحله Update میرسم داده هایی که تو دیتابیس ذخیره میکنه اشتباست یعنی مثلا فیلد زاویه شروع بازوی راست تو ستون زاویه پایان بازوی راست ذخیره میکنه و همینجور یک فیلد میره جلو یا مثلا سختی بازوی راست تو ستون تکرار ذخیره میشه !
بعد مشکل دوم اینه که همه رکوردهای جدول رو تغییر میده حتی اونایی که کدهای بیمار متفاوته!
یه مشکل دیگه هم اینکه بعضی وقتا مثلا تنظیمات بازوی راست رو تعیین می کنم و برای اولین بار ذخیره می کنم بعد دفعه دوم که این تنظیمات بارگزاری شد وقتی مثلا یه فیلدشو تغییر میدم مثلا فیلد زاویه پایان بازوی راست رو تغییر میدم وقتی میره دیتابیس رو آپدیت کنه خطای Data type mismatch in criteria expression میده!
خیلی عجیبه مشکل کجاست؟

parvizwpf
شنبه 15 شهریور 1393, 09:34 صبح
این چیزی نمیتونه باشه جز اینکه پارامترها رو دارید پس و پیش ، پاس میدید.

elahe1393
شنبه 15 شهریور 1393, 09:48 صبح
فکر نکنم چون تمام مقداردهی ها درسته چندین بار چک کردم کل پارامترها درست مقداردهی شده
در اولین آپدیت فیلدهارو میخواد ذخیره کنه یکی میره جلو تو آپدیت بعدی دوباره یکی میره جلو می خواد ذخیره کنه که مثلا چک باکس رو نمیتونه تو تکست ذخیره کنه خطا میده! بعد مشکل دیگه اینه که وقتی میخواد آپدیت کنه کل رکوردهای جدول تغییر میکنن!

elahe1393
شنبه 15 شهریور 1393, 15:18 عصر
هنوز مشکلم حل نشده نمیدونم ایرادش چیه میشه یه راهنمایی کنید

محمد آشتیانی
شنبه 15 شهریور 1393, 18:13 عصر
سلام
ببینید ، مشکل اینجاست که oledb پارامترها رو بر اساس ترتیب معرفی اونها استفاده میکنه و نه بر اساس اسم پارامتر ها
این یعنی وقتی شما داری پارامترها رو تعریف میکنی ، دقیقا باید به همون صورت و ترتیب توی کوئریت استفاده کنی و اگر نیازی به پارامتری نداری اصلا تعریفش نکن
و اینکه شما قبل از همه پارامترها علامت @ رو قراربده.

شما الان توی هیچ کدوم از کوئری ها ترتیب رو رعایت نکردی و بنابراین تو هردو کوئری باید خطا داشته باشی.
(مثلا تو کوئری آپدیت ، اولین پارامتر معرفی شده patientCode هست در صورتی که اولین پارامتر استفاده شده leftIsEnabled )

موفق باشید

elahe1393
یک شنبه 16 شهریور 1393, 08:27 صبح
تشکر مشکلم حل شد