PDA

View Full Version : سوال: پروژه با sqlite



Masoomeh.H
سه شنبه 27 مرداد 1394, 08:39 صبح
سلام دوستان
من یه پروژه دارم انجام می دم که یا sqlite کار می کنه. توی صفحه اول پروژه یه گریدویو هست که به دیتایسم وصله. تا اینجای کار مشکلی ندارم مشکل اونجایی شروع می شه که من هرچی داده وارد می کنم (داده ها از دو طریق یه فرم insert و خود گریدویو وارد می شند) توی دیتابیسم ذخیره نمی شه. لطفا واسه حل مشکلم کمک کنید

Mahmoud Zaad
سه شنبه 27 مرداد 1394, 08:50 صبح
سلام
کدهایی که نوشتید رو پست کنید.
این فایل (http://barnamenevis.org/showthread.php?496699-SQLITE-%D8%B1%D9%88-%DA%86%D9%87-%D8%AC%D9%88%D8%B1%DB%8C-%D8%A8%DB%8C%D8%A7%D8%B1%D9%85-%D8%AA%D9%88-%D8%B1%D9%81%D8%B1%D9%86%D8%B3&p=2219554&viewfull=1#post2219554) رو هم دانلود کنید، فایل خوبیه.

Masoomeh.H
سه شنبه 27 مرداد 1394, 09:24 صبح
سلام
کدهایی که نوشتید رو پست کنید.
این فایل (http://barnamenevis.org/showthread.php?496699-SQLITE-%D8%B1%D9%88-%DA%86%D9%87-%D8%AC%D9%88%D8%B1%DB%8C-%D8%A8%DB%8C%D8%A7%D8%B1%D9%85-%D8%AA%D9%88-%D8%B1%D9%81%D8%B1%D9%86%D8%B3&p=2219554&viewfull=1#post2219554) رو هم دانلود کنید، فایل خوبیه.


SQLiteConnection ObjConnection = new SQLiteConnection("Data Source=Data/saba.s3db;");


ObjConnection.Open();
string q2 = "INSERT INTO SerialValue(Serial_No,Value,Expire_Date) VALUES('"+RandomNumber(100, 999) + RandomNumber(1000, 9999)+"','"+ Txt_cardcost.Text+"','"+MTxt_CardExdate.Text+"')";
SQLiteCommand cmd1 = new SQLiteCommand(q2, ObjConnection);
cmd1.Parameters.AddWithValue("@Serial_No", RandomNumber(100, 999) + RandomNumber(1000, 9999));
cmd1.Parameters.AddWithValue("@Value", Txt_cardcost.Text);
cmd1.Parameters.AddWithValue("@Expire_Date", MTxt_CardExdate.Text);
cmd1.ExecuteNonQuery();

try
{
// ObjConnection.Close();
}
catch
{
MessageBox.Show("An Error Was Occured", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}




اینا کدهای insert که استفاده کردم هست . من توی سولوشن پروژه یه فایل ساختم و توی اون دیتابیسم رو اضافه کردم. ممنون می شم اگه کمکم کنید

golbafan
سه شنبه 27 مرداد 1394, 09:36 صبح
سلام دوستان
من یه پروژه دارم انجام می دم که یا sqlite کار می کنه. توی صفحه اول پروژه یه گریدویو هست که به دیتایسم وصله. تا اینجای کار مشکلی ندارم مشکل اونجایی شروع می شه که من هرچی داده وارد می کنم (داده ها از دو طریق یه فرم insert و خود گریدویو وارد می شند) توی دیتابیسم ذخیره نمی شه. لطفا واسه حل مشکلم کمک کنید

سلام برنامه خودتون رو با run as administrator اجرا کنید
فایل دیتابیس رو هم در پوشه ای غیر از درایو ویندوز بزارید

abdullah20
سه شنبه 27 مرداد 1394, 10:16 صبح
البته نیازی به اجرا کردن به صورت admin و نصب در درایو غیر از ویندوز به صورت اجبار نیست چون شاید مشتری خواست برنامه را در درایور c نصب کند(البته به خاطر وجود پایگاه داده باید به کاربر تذکر داد در درایو غیر از ویندوز نصب کند)
پروژتون که تموم شد هنگان ساخت ستاپ باید کاری کنید که اگر کاربر در درایو c هم نصب کرد پایگاه داده readonly نشود

Masoomeh.H
سه شنبه 27 مرداد 1394, 12:55 عصر
سلام برنامه خودتون رو با run as administrator اجرا کنید
فایل دیتابیس رو هم در پوشه ای غیر از درایو ویندوز بزارید


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

abdullah20
سه شنبه 27 مرداد 1394, 13:20 عصر
دوست عزیز کد insert را مشاهده کنید مثلا این پارامتری که مقداردهی میکنید "@Serial_No" کجا تعریف کردید؟

abdullah20
سه شنبه 27 مرداد 1394, 13:27 عصر
SQLiteConnection con = new SQLiteConnection("Data Source=saba.s3db;Version=3;");
string q1 = "INSERT INTO SerialValue(Serial_No,Serial_Value,Expire_Date) VALUES(@Serial_No,@Serial_Value,@Expire_Date)";
SQLiteCommand cmd = new SQLiteCommand(q1,con);
cmd.Parameters.AddWithValue("@Serial_No", "داده");
cmd.Parameters.AddWithValue("@Serial_Value", "داده");
cmd.Parameters.AddWithValue("@Expire_Date", "داده");
con.Open();
cmd.ExecuteNonQuery();
con.Close();

Masoomeh.H
سه شنبه 27 مرداد 1394, 13:35 عصر
دوست عزیز کد insert را مشاهده کنید مثلا این پارامتری که مقداردهی میکنید "@Serial_No" کجا تعریف کردید؟

خوب بوسیله یه تابع رندم یه سریال رندم تولید می کنم و مقدار می دم
cmd1.Parameters.AddWithValue("@Serial_No", RandomNumber(100, 999) + RandomNumber(1000, 9999));
البته قبلا با یه تکست باکس مقدار دهی می شد که اون رو هم قبول نمی کرد

abdullah20
سه شنبه 27 مرداد 1394, 13:37 عصر
کد insert را قرار دادم که مگه جواب نداد؟
در ضمن Value را به Serial_Value تغییر دادم

Masoomeh.H
سه شنبه 27 مرداد 1394, 13:43 عصر
کد insert را قرار دادم که مگه جواب نداد؟
در ضمن Value را به Serial_Value تغییر دادم

خوب من توی دیتابیسم value دارم نه serial_value. مگه نباید با دیتابیسم یکی باشه؟؟؟؟

abdullah20
سه شنبه 27 مرداد 1394, 13:48 عصر
چرا دوست عزیز گفتم داخل جدولتون هم این نام را قرار بدید بهتره

Masoomeh.H
سه شنبه 27 مرداد 1394, 14:13 عصر
چرا دوست عزیز گفتم داخل جدولتون هم این نام را قرار بدید بهتره

من کد رو به صورت زیر در آوردم . با اینکه برنامه اروری نمی ده ولی اطلاعات به دیتابیس اضافه نمی شه

SQLiteConnection con = new SQLiteConnection("Data Source=data/saba.db;Version=3;"); sqls = "INSERT INTO SerialValue([Serial_No],[Value],[Expire_Date]) VALUES(@Serial_No,@Value,@Expire_Date)";
SQLiteCommand cmd = new SQLiteCommand(sqls, con);
cmd.Parameters.AddWithValue("@Serial_No", Txt_cardcost.Text);
cmd.Parameters.AddWithValue("@Value", Txt_cardcost.Text);
cmd.Parameters.AddWithValue("@Expire_Date", MTxt_CardExdate.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

Mahmoud Zaad
سه شنبه 27 مرداد 1394, 15:50 عصر
کد شما رو تست کردم مشکلی نداره، احتمالاً شما دیتابیس دیگه ای رو چک می کنید. شما کدهای زیر رو دقیقاً بعد از کدهای بالا بنویسید، باید اطلاعات در دیتاگریدویو نمایش داده بشه.

SQLiteDataAdapter da = new SQLiteDataAdapter("Select*from SerialValue", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;

Masoomeh.H
سه شنبه 27 مرداد 1394, 16:23 عصر
کد شما رو تست کردم مشکلی نداره، احتمالاً شما دیتابیس دیگه ای رو چک می کنید. شما کدهای زیر رو دقیقاً بعد از کدهای بالا بنویسید، باید اطلاعات در دیتاگریدویو نمایش داده بشه.

SQLiteDataAdapter da = new SQLiteDataAdapter("Select*from SerialValue", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;


اضافه کردم اون داده های جدیدی هم که داده بودم به گریدویو اضافه شد ولی با اجرای مجدد برنامه توی گریدویو فقط همون داده های اولیه که خودم وارد کردم بود.

Mahmoud Zaad
سه شنبه 27 مرداد 1394, 16:29 عصر
اگه مشکلی نیست همین بخش از پروژه و دیتابیس رو آپلود کنید.

Masoomeh.H
سه شنبه 27 مرداد 1394, 16:43 عصر
اگه مشکلی نیست همین بخش از پروژه و دیتابیس رو آپلود کنید.
134417


اینم از پروژه

Mahmoud Zaad
سه شنبه 27 مرداد 1394, 17:22 عصر
مشکلی نداره جز اینکه یه بخش هایی رو باید از حلقه بیارید بیرون. باز هم من فکر می کنم شما دیتابیس اصلی که در پوشه Debug قرار داره رو بررسی نمی کنید.
این کل کدهای فرم هست، دیتابیس اصلی هم که در پوشه دیباگ هست، بقیه پوشه های data و دیتابیس ها رو پاک کنید. اگر مشکلی باشه خطا میده و مشخص میشه مشکل از کجا بوده.

SQLiteConnection con = new SQLiteConnection("Data Source=data/saba.db;Version=3;");

private int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
}

private void button1_Click(object sender, EventArgs e)
{
int i = Convert.ToInt16(Txt_cardnum.Text);

con.Open();
string sqls = "INSERT INTO SerialValue(Serial_No, Value, Expire_Date) VALUES(@Serial_No, @Value, @Expire_Date)";
SQLiteCommand cmd = new SQLiteCommand(sqls, con);

for (int j = 0; j < i; j++)
{
cmd.Parameters.AddWithValue("@Serial_No", RandomNumber(100, 999) + RandomNumber(1000, 9999));
cmd.Parameters.AddWithValue("@Value", Txt_cardcost.Text);
cmd.Parameters.AddWithValue("@Expire_Date", MTxt_CardExdate.Text);
cmd.ExecuteNonQuery();
}

con.Close();

GetData();
}

private void GetData()
{
SQLiteDataAdapter da = new SQLiteDataAdapter("Select*from SerialValue", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
}

private void Form2_Load(object sender, EventArgs e)
{
GetData();
}

---------------------- ویرایش

الان که توی فایل App.config رو نگاه کردم دیدم 3 تا کانکشن استرینگ دارید که دوتاش توی پوشه viana هست دومیش هم در مسیر viana/viana/data هست. یعنی شما توی دیتابیسی که توی پوشه دیباگ هست دیتا وارد می کنید ولی از یه پوشه دیگه اطلاعات DataSet1 رو پر می کنید و نمایش میدید، مشکل همینجاست.

abdullah20
سه شنبه 27 مرداد 1394, 17:25 عصر
فکر کنم copy to output directory روی copy always هست بزارید روی do note copy

Masoomeh.H
سه شنبه 27 مرداد 1394, 18:14 عصر
فکر کنم copy to output directory روی copy always هست بزارید روی do note copy

خوب وقتی do note copy باشه می زنه که نمیتونه دیتابیس رو باز کنه و ارور می ده وسط اجرا