PDA

View Full Version : سوال: خطای string or binary data would be truncated در ذخیره عکس در دیتابیس



salehvasaleh
چهارشنبه 11 دی 1392, 18:35 عصر
دوستان من در بانک اس کیو الم سه تا داده رو می خوام ذخیره کنم اولی و دومی متن هستند و در سومی می خوام عکس ذخیره کنم نوعش رو هم image تعریف کردم حالا توی سی شارپ وقتی می خوام فرمان ذخیره متن از داخل دو تکست باکس و عکسی که در داخل picture box هست رو بنویسم اروری می ده که عکسش رو قرار دادم. ضمنان کدهایی که نوشتم هم اینجا هستند: ممنون میشم راهنماییم کنید و بگید که علت مشکل کجاست؟


string strr;
strr = "Data Source=.;Initial Catalog=bca;Integrated Security=True";
SqlConnection con = new SqlConnection(strr);
con.Open();
SqlCommand com = new SqlCommand("insert into Table_1(name,pass,akss)values(@name,@pass,@akss)", con);
com.Parameters.AddWithValue("@name", textBox1.Text.Trim());
com.Parameters.AddWithValue("@pass", textBox2.Text.Trim());

MemoryStream Memory = new MemoryStream();
pictureBox1.Image.Save(Memory, pictureBox1.Image.RawFormat);
byte[] arrImage = Memory.GetBuffer();
Memory.Close();
com.Parameters.AddWithValue("@akss", arrImage);
com.ExecuteNonQuery();
com.Parameters.Clear();
MessageBox.Show("عکس شما ذخيره شد");
con.Close();
return;

این هم تصویر ارور:
http://www.uploadax.com/images/98184320572514275324.jpg
ممنون میشم راهنماییم کنید

hmbarnamenevis
چهارشنبه 11 دی 1392, 18:39 عصر
System.Data.OleDb.OleDbConnection MyConnection;
private void Insert_Customer_Load(object sender, EventArgs e)
{
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Customer.accdb;Persist Security Info=True;Jet OLEDB:Database Password=123";
MyConnection = new System.Data.OleDb.OleDbConnection(strConn);
}

private void InsertBtn_Click(object sender, EventArgs e)
{
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
string sql = null;

MyConnection.Open();
myCommand.Connection = MyConnection;
byte[] imageContent = File.ReadAllBytes(imagePathTxt.Text);
sql = "INSERT INTO [Customer_Data] (Image) VALUES (@photo)";
myCommand.CommandText = sql;
OleDbParameter ph = new OleDbParameter("@photo", OleDbType.VarBinary);
ph.Value = imageContent;
ph.Size = imageContent.Length;
myCommand.Parameters.Add(ph);
myCommand.ExecuteNonQuery();
MyConnection.Close();
}

salehvasaleh
چهارشنبه 11 دی 1392, 19:05 عصر
یعنی مشکل کدهای من کجا بوده؟؟ میشه روی همون کد من توضیح بدین؟ ممنون

hmbarnamenevis
چهارشنبه 11 دی 1392, 19:27 عصر
راه حل این نمونه کد مثل کد خودتون هست:
public static void PerisitImage(string path, IDbConnection connection)
{
using (var command = connection.CreateCommand ())
{
Image img = Image.FromFile (path);
MemoryStream tmpStream = new MemoryStream();
img.Save (tmpStream, ImageFormat.Png); // change to other format
tmpStream.Seek (0, SeekOrigin.Begin);
byte[] imgBytes = new byte[MAX_IMG_SIZE];
tmpStream.Read (imgBytes, 0, MAX_IMG_SIZE);

command.CommandText = "INSERT INTO images(payload) VALUES (:payload)";
IDataParameter par = command.CreateParameter();
par.ParameterName = "payload";
par.DbType = DbType.Binary;
par.Value = imgBytes;
command.Parameters.Add(par);
command.ExecuteNonQuery ();
}
}

salehvasaleh
چهارشنبه 11 دی 1392, 19:37 عصر
ممنون از پاسختون ولی یه سوال کد من کجاش اشکال داشته که اون ایراد رو گرفته این رو از این جهت می گم که دیگه اشتباه تکراری انجام ندهم ، قبلا این کدو می زدم درست کار می کرد نمی دونم اشکال کارم کجاست؟

Babak-Magic
جمعه 13 دی 1392, 08:16 صبح
درود
این ارور زمانی داده می شود که مقداری که شما سعی بر ریختن آن در فیلد میکنید بیشتر از اندازه فیلد باشه

salehvasaleh
جمعه 13 دی 1392, 14:33 عصر
درود
این ارور زمانی داده می شود که مقداری که شما سعی بر ریختن آن در فیلد میکنید بیشتر از اندازه فیلد باشه
سلام ضمن تشکر از توضیحتون. یعنی داخل فیلدهای غیر از عکس که از نوع nvarchar هستند این مشکلل بوجود آمده یا مربوط به همون فیلد عکس میشه؟ برای رفعش باید چیکار کنم؟ در فیلد اول و دوم هدفم ثبت نام و نام خانوادگیه و از نوع nvarchar تعریفشون کردم. ممنون میشم راهنماییم کنید

Babak-Magic
شنبه 14 دی 1392, 14:35 عصر
درود
من توی کد شما مشکلی نمی بینم و درسته کداتون.فیلدای نام و پسوردتون رو چک کنید