PDA

View Full Version : حرفه ای: پاس کردن مقدار نال به فیلد عکس در سطح کلاس



esafb52
سه شنبه 18 تیر 1392, 11:30 صبح
با سلام من دارم به صورت سه لایه تو یه پروژه کار میکنم تو لایه BAL یه متد برای اینسرت کردن دیتا نوشتم تنها مشکلی که هست اینکه نمیتونم بهش مقدار نال پاس کنم اونم فقط برای فیلد عکس
از چه چیزی میتونم استفاده کنم تا درصورتیکه اگه بهش عکسی ندادم هیچی درج نکنه البته منظورم متدی هست که تو اون لایه نوشتم
کد های من که بدون فیلد عکس خوب کار میکنن
:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Data;
using System.Windows.Forms;

namespace PhtooMangement
{
public class BAL
{
DAL db = new DAL();



private int _id;
private string _name;
private string _path;
private int _picnumber;
public byte[] _image2;


public byte[] Bytesimages
{
get { return _image2; }
set { _image2 = value; }
}

public int id
{
get { return _id; }
set { _id = value; }
}

public string name
{
get { return _name; }
set { _name = value; }
}
public int picnumber
{
get { return _picnumber; }
set { _picnumber = value; }
}
public string path
{
get { return _path; }
set { _path = value; }
}


public void insert()
{
string sql = "INSERT INTO tbpic (fullname,picnumber,path)";
sql += "values (N'{0}',{1},N'{2}')";
sql = String.Format(sql, this._name, this._picnumber, this._path);
db.conect();
db.docomand(sql);
db.disconect();
}

و اما زمانیکه که عکس رو هم در دستور اینسرت اضافه میکنم خطا میده!!!!!
public void insert()
{
string sql = "INSERT INTO tbpic (fullname,picnumber,path,image)";
sql += "values (N'{0}',{1},N'{2}',{3})";
sql = String.Format(sql, this._name, this._picnumber, this._path,this._image2);
db.conect();
db.docomand(sql);
db.disconect();
}
البته اگه از سه لایه استفاده نکنم مشکلی ندارم اما با این روش نمیدونم چطور حلش کنم
کدهام بدون معماری سه لایه:

if (textBoxX1.Text == "" || textBoxX2.Text == "")
{
MessageBox.Show("!!!لطفا موارد خواسته شده را کامل نمایید");
return;
}
else
{
if (pictureBox1.Image == null || checkBox1.Checked == false)
{
cmd.CommandText = "INSERT INTO tbpic (fullname,tell,picnumber,path) values(@1,@2,@3,@4)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@1", textBoxX1.Text);
cmd.Parameters.AddWithValue("@2", textBoxX2.Text);
cmd.Parameters.AddWithValue("@3", textBoxX3.Text);
cmd.Parameters.AddWithValue("@4", textBoxX4.Text);


}
else
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrImage = ms.GetBuffer();
ms.Close();
cmd.CommandText = "INSERT INTO tbpic (fullname,tell,picnumber,path,image) values(@1,@2,@3,@4,@5)";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@1", textBoxX1.Text);
cmd.Parameters.AddWithValue("@2", textBoxX2.Text);
cmd.Parameters.AddWithValue("@3", textBoxX3.Text);
cmd.Parameters.AddWithValue("@4", textBoxX4.Text);
cmd.Parameters.AddWithValue("@5", arrImage);
}
}
try
{
iud(cmd);
pictureBox1.Image = null;
MessageBox.Show("این عکس با موفقیت اضافه شد");
clearalltextbox();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
con.Close();
LoadAll();
MessageBox.Show("!!!این عکس قبلا ثبت شده است");
}

pooria_googooli
سه شنبه 18 تیر 1392, 11:44 صبح
اروری که بهت میده چیه ؟

esafb52
سه شنبه 18 تیر 1392, 12:09 عصر
من این کد رو مثلا مینویسم
:

db.name = "aaaaa";
db.picnumber =10;
db.path = "c:\\dcs";
db.Bytesimages = null;
db.insert();
reload();

و خطا میده :
{"Incorrect syntax near ')'."}

esafb52
چهارشنبه 19 تیر 1392, 00:59 صبح
خسته شدم راستش سرچ کردم اما چیزهایی رو که دیدم به درد معماری سه لایه نمیخورد!!!!کسی از اساتید راهنمایی نمیکنن که مشکل از کجاس
متن خطا:
---------------------------

---------------------------
An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.

Incorrect syntax near ''.
---------------------------
OK
---------------------------
در صورتیکه اسم تون کاملا صحیح هست