۲۴-اسفند-۱۳۹۲, ۱۳:۱۶:۰۷
۲۴-اسفند-۱۳۹۲, ۱۳:۵۷:۵۹
اول بايد يك تيبل بسازي و فيلدي از نوع Blob داخلش توليد كني تا بشه تصوير رو داخلش ذخيره كرد
بعد هم با استفاده از متد زير مي توني تصوير رو ذخيره كني :
و از كد زير هم براي خواندن مجدد تصوير از بانك استفاده كن
منبع :
http://stackoverflow.com/questions/62502...rom-sqlite
بعد هم با استفاده از متد زير مي توني تصوير رو ذخيره كني :
کد php:
protected Boolean updateByteArrayInTable(String table, String value, byte[] byteArray, String expr)
{
try
{
SQLiteCommand mycommand = new SQLiteCommand(connection);
mycommand.CommandText = "update " + table + " set " + value + "=@image" + " where " + expr;
SQLiteParameter parameter = new SQLiteParameter("@image", System.Data.DbType.Binary);
parameter.Value = byteArray;
mycommand.Parameters.Add(parameter);
int rowsUpdated = mycommand.ExecuteNonQuery();
return (rowsUpdated>0);
}
catch (Exception)
{
return false;
}
}
و از كد زير هم براي خواندن مجدد تصوير از بانك استفاده كن
کد php:
protected DataTable executeQuery(String command)
{
DataTable dt = new DataTable();
try
{
SQLiteCommand mycommand = new SQLiteCommand(connection);
mycommand.CommandText = command;
SQLiteDataReader reader = mycommand.ExecuteReader();
dt.Load(reader);
reader.Close();
return dt;
}
catch (Exception)
{
return null;
}
}
protected DataTable getAllWhere(String table, String sort, String expr)
{
String cmd = "select * from " + table;
if (sort != null)
cmd += " order by " + sort;
if (expr != null)
cmd += " where " + expr;
DataTable dt = executeQuery(cmd);
return dt;
}
public DataRow getImage(long rowId) {
String where = KEY_ROWID_IMAGE + " = " + Convert.ToString(rowId);
DataTable dt = getAllWhere(DATABASE_TABLE_IMAGES, null, where);
DataRow dr = null;
if (dt.Rows.Count > 0) // should be just 1 row
dr = dt.Rows[0];
return dr;
}
public byte[] getImage(DataRow dr) {
try
{
object image = dr[KEY_IMAGE];
if (!Convert.IsDBNull(image))
return (byte[])image;
else
return null;
} catch(Exception) {
return null;
}
}
DataRow dri = getImage(rowId);
byte[] image = getImage(dri);
منبع :
http://stackoverflow.com/questions/62502...rom-sqlite
۲۴-اسفند-۱۳۹۲, ۱۶:۳۷:۵۶
مرسی از شما
ولی جدولی که دارم اطلاعات تکست توش هست باید تو همین جدول عکس ذخیره بشه ولی نمیدونم با چه کمندی!!؟؟
شماره سه باید توش عکس ذخیره بشه
نمیدونم باید چطور بنویسمش
ولی جدولی که دارم اطلاعات تکست توش هست باید تو همین جدول عکس ذخیره بشه ولی نمیدونم با چه کمندی!!؟؟
کد php:
string Query_forosh = "insert into forosh values (@1,@2,@3)";
SQLiteCommand cmd4 = new SQLiteCommand(Query_forosh, mok.connection);
mok.connection.Open();
cmd4.Parameters.AddWithValue("@1", serial_forosh.ToString());
cmd4.Parameters.AddWithValue("@2", text_addres_forosh.Text);
cmd4.Parameters.AddWithValue("@3", System.Data.DbType.Binary);
نمیدونم باید چطور بنویسمش
۲۴-اسفند-۱۳۹۲, ۱۶:۵۰:۱۱
به قول يكي از دوستان دوحالت بيشتر نداره!
يا نوع فيلد شماره 3 رو از String به BLOD تغيير بده
يا به جاي ذخيره عكس داخل ديتابيس، اون رو داخل يك فولدر مشخص روي هارد ذخيره كن و اسم و آدرسش رو داخل بانك قرار بده
يا نوع فيلد شماره 3 رو از String به BLOD تغيير بده
يا به جاي ذخيره عكس داخل ديتابيس، اون رو داخل يك فولدر مشخص روي هارد ذخيره كن و اسم و آدرسش رو داخل بانك قرار بده
۲۴-اسفند-۱۳۹۲, ۱۶:۵۳:۴۷
(۲۴-اسفند-۱۳۹۲, ۱۶:۵۰:۱۱)Di Di نوشته است: [ -> ]به قول يكي از دوستان دوحالت بيشتر نداره!
يا نوع فيلد شماره 3 رو از String به BLOD تغيير بده
يا به جاي ذخيره عكس داخل ديتابيس، اون رو داخل يك فولدر مشخص روي هارد ذخيره كن و اسم و آدرسش رو داخل بانك قرار بده
مرسی
تغییر دادم
الان آدرس عکس رو بعد از این که کاربر انتخابش کرد بگیرم و تو دستور کمند قرار بدم یا کار دیگه ای باید بکنم؟
مثل زیر؟؟
کد php:
cmd4.Parameters.AddWithValue("@3",@"C:\آدرس\");
۲۴-اسفند-۱۳۹۲, ۱۶:۵۷:۵۰
دقيقا مثل هميني كه نوشتي
۲۴-اسفند-۱۳۹۲, ۱۷:۰۸:۴۰
(۲۴-اسفند-۱۳۹۲, ۱۶:۵۷:۵۰)Di Di نوشته است: [ -> ]دقيقا مثل هميني كه نوشتيمرسی ولی
اگه بخوام مستقیم عکس ذخیره بشه چی؟؟
اگه میشه به این سبک برام توضیح بدین
از پست اول تقریبا چیزی نفهمیدم...
۲۴-اسفند-۱۳۹۲, ۱۷:۵۶:۰۱
خوب شما اول بايد ديتاتايپ اون فيلد رو از Textبه BLOB تغيير بدي.
اين كار داخل ديزاينر ديتابيس قابل انجام هست و كار خاصي نداره
بعدش مي ريم سراغ كد نويسي
تو كدي كه من تو پست اول گذاشتم دقيقا يك روتين آماده شده تا با استفاده از اون بتونيد عكس رو داخل هر جدول دلخواه ذخيره كنيد
در اينجا پارامترهاي مورد نياز رو بهش مي ديم
Table = نام جدول
Value = نام فيلد
Byte[] = بايت هاي تصوير كه بايد ذخيره شوند
expr = شرطي كه به وسيله آن ركوردي كه مخي واهيم آپديتش كنيم شناسايي شود
خوب تنها كاري كه بايد انجام بديد اينه كه مقدار پارامترها رو بديد به اين روتين تا تصوير ذخيره بشه
اين كار داخل ديزاينر ديتابيس قابل انجام هست و كار خاصي نداره
بعدش مي ريم سراغ كد نويسي
تو كدي كه من تو پست اول گذاشتم دقيقا يك روتين آماده شده تا با استفاده از اون بتونيد عكس رو داخل هر جدول دلخواه ذخيره كنيد
کد php:
protected Boolean updateByteArrayInTable(String table, String value, byte[] byteArray, String expr)
در اينجا پارامترهاي مورد نياز رو بهش مي ديم
Table = نام جدول
Value = نام فيلد
Byte[] = بايت هاي تصوير كه بايد ذخيره شوند
expr = شرطي كه به وسيله آن ركوردي كه مخي واهيم آپديتش كنيم شناسايي شود
خوب تنها كاري كه بايد انجام بديد اينه كه مقدار پارامترها رو بديد به اين روتين تا تصوير ذخيره بشه
۲۵-اسفند-۱۳۹۲, ۱۳:۰۱:۱۲
(۲۴-اسفند-۱۳۹۲, ۱۷:۵۶:۰۱)Di Di نوشته است: [ -> ]Byte[] = بايت هاي تصوير كه بايد ذخيره شوندمرسی
expr = شرطي كه به وسيله آن ركوردي كه مخي واهيم آپديتش كنيم شناسايي شود
ولی مشکله من هم همین دوتا هست!
چجوری بایت های تصویر رو بهش بدم
- منظور از شرط چیه!!!
- آدرس تصویر از کجا داده میشه که ذخیره بشه؟؟
۲۵-اسفند-۱۳۹۲, ۱۶:۲۰:۲۳
(۲۵-اسفند-۱۳۹۲, ۱۳:۰۱:۱۲)Fire_Falcon نوشته است: [ -> ]چجوری بایت های تصویر رو بهش بدم
خوب شما بايد عكس رو تبديل به بايت كنيد
کد php:
Image photo = new Bitmap(@"\Photos\Image20120601_1.jpeg");
byte[] pic = ImageToByte(photo, System.Drawing.Imaging.ImageFormat.Jpeg);
(۲۵-اسفند-۱۳۹۲, ۱۳:۰۱:۱۲)Fire_Falcon نوشته است: [ -> ]- منظور از شرط چیه!!!شما فرض كن هر ركورد مربوط به تصوير علاوه بر خود عكس شامل اطلاعات ديگه اي مثل نام و شماره و ... هم هست
حالا براي اينكه بدوني عكس مربوط به كدوم ركورد رو مي خواي ذخيره كني بايد يه شرط بگذاري مثلا بگي ركوردي كه شماره اش
125 هست يا ركوردي كه اسمش هست Saedيا غيره
کد php:
Update forosh Set @1=125 where @2=100
(۲۵-اسفند-۱۳۹۲, ۱۳:۰۱:۱۲)Fire_Falcon نوشته است: [ -> ]- آدرس تصویر از کجا داده میشه که ذخیره بشه؟؟آدرس رو هم يا خودت دستي بده مثل مثال من يا با يك ديالوگ باكس از كاربر بخواه تا خودش از داخل كامپيوتر انتخاب كنه
اين هم يك مثال براي ذخيره عكس در ديتابيس و فراخواني و نمايش اون روي فرم
کد php:
namespace ImagenSQLite
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Image photo = new Bitmap(@"\Photos\Image20120601_1.jpeg");
byte[] pic = ImageToByte(photo, System.Drawing.Imaging.ImageFormat.Jpeg);
SaveImage(pic);
LoadImage();
}
public byte[] ImageToByte(Image image, System.Drawing.Imaging.ImageFormat format){
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
return imageBytes;
}
}
//public Image Base64ToImage(string base64String)
public Image ByteToImage(byte[] imageBytes)
{
// Convert byte[] to Image
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = new Bitmap(ms);
return image;
}
/***************** SQLite **************************/
void SaveImage(byte[] imagen){
string conStringDatosUsuarios = @" Data Source = \Program Files\GPS___CAM\Data\DatosUsuarios.s3db ";
SQLiteConnection con = new SQLiteConnection(conStringDatosUsuarios);
SQLiteCommand cmd = con.CreateCommand();
cmd.CommandText = String.Format("INSERT INTO Empleados (Foto) VALUES (@0);");
SQLiteParameter param = new SQLiteParameter("@0", System.Data.DbType.Binary);
param.Value = imagen;
cmd.Parameters.Add(param);
con.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (Exception exc1)
{
MessageBox.Show(exc1.Message);
}
con.Close();
}
void LoadImage(){
string query = "SELECT Photo FROM Table WHERE ID='5';";
string conString = @" Data Source = \Program Files\Users.s3db ";
SQLiteConnection con = new SQLiteConnection(conString);
SQLiteCommand cmd = new SQLiteCommand(query, con);
con.Open();
try
{
IDataReader rdr = cmd.ExecuteReader();
try
{
while (rdr.Read())
{
byte[] a = (System.Byte[])rdr[0];
pictureBox1.Image = ByteToImage(a);
}
}
catch (Exception exc) { MessageBox.Show(exc.Message); }
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
con.Close();
}
}
}