PDA

View Full Version : سوال: عمل نکردن insert در ارتباط با بانک access



hamidhws
یک شنبه 09 آذر 1393, 10:59 صبح
سلام
این کد من برای insert هست، ارور نمیده و اجرا میشه اما رکوردی اضافه نمیشه چرا؟کسی میدونه؟
public void Insert(string CalibrationNumber,string Error,string Flowrate,string Customer,string OrderNumber,string Date,string Type) {
private OleDbConnection con = new OleDbConnection();
con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Database Engine/CalCert.mdb;Persist Security Info=False");
con.Open();
string query = "insert into CalibrationData ([CalibrationNumber], [Error], [Flowrate], [Customer], [OrderNumber], [Date], [Type]) VALUES(@CalibrationNumber,@Error,@Flowrate,@Custom er,@OrderNumber,@Date,@Type)";
OleDbCommand myCommand = new OleDbCommand();
myCommand.CommandText = query;
myCommand.Parameters.AddWithValue("@CalibrationNumber",CalibrationNumber);
myCommand.Parameters.AddWithValue("@Error", Error);
myCommand.Parameters.AddWithValue("@Flowrate", Flowrate);
myCommand.Parameters.AddWithValue("@Customer", Customer);
myCommand.Parameters.AddWithValue("@OrderNumber", OrderNumber);
myCommand.Parameters.AddWithValue("@Date", Date);
myCommand.Parameters.AddWithValue("@Type", Type);
myCommand.Connection = con;
myCommand.ExecuteNonQuery();
con.Close();
}

Mani_rf
یک شنبه 09 آذر 1393, 11:47 صبح
myCommand.ExecuteNonQuery(); رو درون یک متغیر Int بریز؛ اگر مقداری که بهت میده از صفر بیشتر بود یعنی بدون مشکل انجام شده.
اگر بدون مشکل انجام شده باشه مطمعنا باید به Connection String شک کنی و بررسی کنی که دقیقا آدرس همون دیتابیسی که داری چک میکنی رو دادی یا نه

int r= myCommand.ExecuteNonQuery();

hamidhws
یک شنبه 09 آذر 1393, 12:24 عصر
ممنون دوست عزیز.
مقدار برگشتی 1 هست. اما نمیدونم چرا رکورد اضافه نمیکنه!
به صورت دستی با query از توی دیتاست هم که میزنم این پیغام میاد : 1row affected by last query

Mani_rf
یک شنبه 09 آذر 1393, 13:13 عصر
پس مطمعن باش که داره اضافه میکنه. البته شاید بعد از بسته شدن کانکشن بتونی تاثیرش رو ببینی. کانکشن رو چک کن

hamidhws
دوشنبه 10 آذر 1393, 12:07 عصر
ممنون Mani_rf عزیز . از طریق server explorer که دیتاش رو چک میکنم تغییر نمیکنه اما میخوام دستور دریافتشو بنویسم شاید اونجا اطلاعاتو دیدم

فقط ممنون میشم راهنماییم کنید از چه طریق دریافت ، حذف ، ویرایش رکورد رو انجام بدم (مثلا کد برای insert رو خودم انجام دادم برای بقیه که گفتم چه طوری باید عمل کنم؟)

با تشکر از محبت و زحمات شما

elahe1393
دوشنبه 10 آذر 1393, 13:15 عصر
یه نمونه
این insert
public void InsertDataReapet(string reapetID, string sportDeviceID, string reportID, Boolean type, int reapetNumber, string startTime)
{
OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";

ocm.Connection = ocn;
ocm.CommandText = "INSERT INTO Reapet(ReapetID,SportDeviceID, ReportID,Type,ReapetNumber,StartTime) VALUES(reapetID,sportDeviceID, reportID,type,reapetNumber,startTime)";
ocm.Parameters.Clear();

ocm.Parameters.AddWithValue("reapetID", reapetID);
ocm.Parameters.AddWithValue("sportDeviceID", sportDeviceID);
ocm.Parameters.AddWithValue("reportID", reportID);
ocm.Parameters.AddWithValue("type", type);
ocm.Parameters.AddWithValue("reapetNumber", reapetNumber);
ocm.Parameters.AddWithValue("startTime", startTime);

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

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

این دریافت
public DataRow GetDeviceSetting(Int32 patientCode)
{
OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();
DataRow deviceSetting = null;

ocn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";

ocm.Connection = ocn;
ocn.Open();

ocm.CommandText = "SELECT * FROM SportDevice WHERE SportDevice.PatientCode = " + patientCode;

OleDbDataAdapter adapter = new OleDbDataAdapter(ocm);
DataSet ds = new DataSet();
adapter.Fill(ds);
if (ds.Tables[0].Rows.Count != 0)
{
return deviceSetting = ds.Tables[0].Rows[0];
}
FarsiMessagbox.Show("هیچ تنظیماتی برای شروع ثبت نشده است. \n وارد صفحه تنظیمات شده و تنظیمات بازوها را تعیین نمایید.", "", FMessageBoxButtons.Ok, FMessageBoxIcon.Error);
return deviceSetting;

}

این ویرایش
//-------------- Update Data Table Sport Device -------------
public void UpdateDataSetting(Int32 patientCode, bool leftIsEnable, string leftStartPoint, string leftEndPoint, string leftHardnessLevel, bool rightIsEnable, string rightStartPoint, string rightEndPoint, string rightHardnessLevel, int reapet)
{
OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\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.AddWithValue("@leftIsEnable", leftIsEnable);
ocm.Parameters.AddWithValue("@LeftStartPoint", leftStartPoint);
ocm.Parameters.AddWithValue("@LeftEndPoint", leftEndPoint);
ocm.Parameters.AddWithValue("@LeftHardnessLevel", leftHardnessLevel);
ocm.Parameters.AddWithValue("@rightIsEnable", rightIsEnable);
ocm.Parameters.AddWithValue("@rightStartPoint", rightStartPoint);
ocm.Parameters.AddWithValue("@rightEndPoint", rightEndPoint);
ocm.Parameters.AddWithValue("@rightHardnessLevel", rightHardnessLevel);
ocm.Parameters.AddWithValue("@reapet", reapet);

ocn.Open();

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

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

اینم حذف
public void DeleteReapetSportDevice(string reportID)
{
OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";

ocm.Connection = ocn;

ocm.CommandText = "DELETE * FROM Reapet WHERE Reapet.ReportID = @reportID";

ocm.Parameters.AddWithValue("@reportID", reportID);

ocn.Open();

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

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

}

hamidhws
سه شنبه 11 آذر 1393, 10:49 صبح
ممنون از محبتتون elahe جان ، توی قسمت دریافت راهی هست بشه بجای datarow از نوع list برگردونم؟
باتشکر

student_jahrom
سه شنبه 11 آذر 1393, 12:05 عصر
سلام دوست عزیز همیشه وقتی می خوای با دیتابیس کار کنی از try-catch استفاده کن تا exception ها رو ببینی و بتونی مشکلت رو پیدا کنی
دوم اگه این چیزی که بالا کپی کردی دقیقا از روی برنامه کپی برداشته باشی @CalibrationNum ber با @CalibrationNumber برابر نیست

hamidhws
سه شنبه 11 آذر 1393, 20:23 عصر
سلام دوست عزیز همیشه وقتی می خوای با دیتابیس کار کنی از try-catch استفاده کن تا exception ها رو ببینی و بتونی مشکلت رو پیدا کنی
دوم اگه این چیزی که بالا کپی کردی دقیقا از روی برنامه کپی برداشته باشی @CalibrationNum ber با @CalibrationNumber برابر نیست


سلام دوست عزیز
موقع کپی اینطوری شده بینش اسپیس نیست توی کد اصلی

elahe1393
چهارشنبه 12 آذر 1393, 08:10 صبح
ممنون از محبتتون elahe جان ، توی قسمت دریافت راهی هست بشه بجای datarow از نوع list برگردونم؟
باتشکر

به جای نوع خروجی تابع List<DataRow< قرار بده و یه تغییر اینجوری توی تابع بده
if (ds.Tables[0].Rows.Count != 0)
{
return deviceSetting = ds.Tables[0].Rows;

}



تست نکردم شاید جواب بده

Yas_Top
دوشنبه 20 مهر 1394, 20:40 عصر
آقا مشگل از کد نیست
اگر دقت کرده باشی چه اطلاعات درون دیتابیس باشه یا نباشه حجم دیتابیس یک اندازست
یعنی مشکل از اینجاست که باید کاری کنیم که این حجم اولیه ثابت نباشه و با توجه به نیاز ما تغییر کنه
در ضمن در این حالت اضافه نمی کنه و هیچ اروری هم نمیده
اگر تونستی این مشکل رو حل کنی بی زحمت به من یه پیغام بده
در ضمن یه پیغام بهم بده تا اگر تونستم حلش کنم بت خبر بدم
Namelast2030@جیمیل دات کام