PDA

View Full Version : سوال: جستجوی اطلاعات از دیتابیس و نمایش آنها روی LinkLabel و label ؟



shakilman
دوشنبه 18 دی 1391, 15:55 عصر
با سلام خدمت دوستان
یک سوال داشتم ؟
چجوری میشه اطلاعات یک رکورد رو جستجو کرد و بعد اون اطلاعات رو به یک linklabel یا label نسبت داد؟
واضح تر بگم من اطلاعات مربوط به چند دیسک رو در دیتابیس ذخیره می کنم این اطلاعات شامل:
1- کد برند به صورت int و بصورت اتوماتیک ثبت میشه(identity)
2-نام برند
3-نوع برند(cd --- dvd+r --- dvd-r)
4-گرید(A ---- B ---- C)
5-عکس برند
6-مسیر عکس
7-فایل اکسل شناسنامه برند(مسیر فایل در دیتابیس ذخیره می شود)
8-فایل اکسل تغییرات برند(مسیر فایل در دیتابیس ذخیره می شود)
من اطلاعات رو در دیتابیس ذخیره میکنم یعنی نام و نوع و گرید به صورت nvarchar , عکس به صورت varbinary و مسیر فایلهای اکسل هم به صورت nvarchar بدون مشکل ذخیره می شوند.
سوالم اینه من چجوری میتونم اطلاعات رو از دیتابیس بیرون بکشم البته بدون دیتا گرید ویو.
من روی فرمم چند label قرار دادم و چند linklabel و یک picturebox که کاربر بعد از جستجوی نام برند مربوطه بتونه عکس برند و دیگر مشخصات رو ببینه و همچنین با کلیلک روی لینک ها بتونه فایل اکسل رو ببینه و همچنین با کلیلک روی لینک مربوط به فولدر عکسها بتونه وارد فولدر مربوطه بشه!
اصلا کسی میتونه شفاف توضیح بده در پس زمینه دیتابیس چی میگذره؟
من اکثر مطالب مربوط به دیتابیس رو خوندم ولی هنوز متوجه نشدم چی به چیه!(بیشتر سایتهارو گشتم ولی به جواب نرسیدم)
1- وقتی ما دستور " select * from table " رو برای جستجو مینویسیم اطلاعات چی میشه و کجا انتخاب میشن!
2- ما چجوری میتونیم مثلا نام دیسک رو جستجو کنیم ولی فیلد مثلا گرید رو در یک label برگردونیم؟
3- این id یا کد برند که کلید اصلی هست برای چیه؟(فقط از عدم تکرار جلوگیری میکنه؟)
4- sql نمیتونه تشخیص بده بعد از جستجو، کلمه مورد نظر در کدام رکورد بوده و فیلدهای مربوط به اون رکورد رو برای ما بیاره؟
5- دستور خاصی وجود داره که ما به فیلد خاصی برسیم؟
از دوستان خواهشمندم با یک نمونه کد و مثال منو یاری کنن!
با سپاس فراوان

RamezanBeik
دوشنبه 18 دی 1391, 16:07 عصر
دوست عزیز جسارت نشه و خدایی نکرده سوء تفاهم پیش نیاد اما به نظر من شما دستورات ابتدایی اس کیو ال رو مطالعه و حدالمکان اون ها رو به صورت Query در خود اس کیو ال اجرا کنید و مطمئن باشید که حداقل بخشی از سوالات فوق شما بر طرف می شه .
بعد شما مباحث مربوط به ADO.net رو هم مطالعه کنی ، تمام مشکلات بر طرف می شه .البته تمام این ها نیاز به تجربه داره که شما به مرور زمان و تمرین به دست میارید . در صورت مطالع این ها و مشکل سوالات خودتون رو بپرسید
موفق باشی

shakilman
دوشنبه 18 دی 1391, 19:16 عصر
اگه امکانش هست در همین تاپیک دوستان مساعدت کنن و نحوه ی واکشی اطلاعات از دیتابیس و لینک دادن آنها به لینک لیبل و غیره رو توضیح بدن ممنون میشم.
من مباحث مربوط به سیکوئل و ADO.NET رو خوندم ولی همه مثل هم هستن ، همه از نمایش اطلاعات در دیتاگرید ویو صحبت کردن و چیزی نفهمیدم یا مباحث پیشرفته است یا من گیرائیم ضعیفه(فکر کنم مورد دوم صحیح است)
بازم از دوستانی که وقت میزارن تا مشکلات تازه کارهایی مث من رو حل کنن تشکر ویژه دارم و دستشان را به گرمی می فشارم.

shakilman
سه شنبه 19 دی 1391, 08:06 صبح
از دوستانی که در این زمینه مهارت دارن خواهش میکنم مباحث پایه ای اس کیو ال و اینکه چجوری میشه به یک رکورد یا فیلد خاص در دیتابیس رسید و مقادیر داخل اون فیلد رو چه عکس باشه و چه متن و یا عدد در یک ابزار روی فرم(مثلا لیبل یا تکست باکس) نمایش داد رو به صورت شفاف توضیح بدن یا سورس معرفی کنن:لبخندساده:
با تشکر

RamezanBeik
سه شنبه 19 دی 1391, 08:17 صبح
نه دوست عزیز این چه حرفی هستش که شما می زنی.شما با یکم تمرین می تونید به مهارت لازم دست پیدا کنید.
در هر صورت من برای شما نمونه ای از کد ها رو قرار می دیم شما با یکم سرو کله زدن حتما می تونید بفهمید چی جوری داره کار می کنه و ازش استفاده کنید.
خوب متد زیر برای واکشی اطلاعات از جداول مورد نظر استفاده می شه و این متد ی Datatabel رو بر می گردونه

private DataTable GetDataTable()
{
string sql = "SELECT * FROM Test";
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
using (SqlCommand myCommand = new SqlCommand(sql, myConnection))
{
myConnection.Open();
using (SqlDataReader myReader = myCommand.ExecuteReader())
{
DataTable myTable = new DataTable();
myTable.Load(myReader);
myConnection.Close();
return myTable;
}
}
}
}



connectionString:این متغییر در واقع حاوی رشته ای درمورد اطلاعات گایکاه داده شما هستش برای کسب اطلاعات بیشتر به سایت زیر مراجعه کنید
http://www.connectionstrings.com/
این متد اطلاعات جدول test رو واکشی ودر MyTabel قرار می دهد.
حالا با دستور زیر می تونید به فیلد مورد نظر دسترسی پیدا کنید.

label.1.text=My table[i].["ّFiled.tostring();]

موفق باشید

RamezanBeik
سه شنبه 19 دی 1391, 08:25 صبح
این هم یک لینک
http://www.codeproject.com/Questions/353481/How-can-we-fill-data-table-in-sqlcommand

shakilman
سه شنبه 19 دی 1391, 09:19 صبح
با تشکر از شما!
من کدهای زیر را نوشتم و اطلاعات دیتابیس در لیست باکس نمایش داده می شود و با کلیک روی هر اسم عکس مربوط به آن در PICTURE BOX دیده می شود.



private void AddBr_Load(object sender, EventArgs e)
{


try
{

con = new SqlConnection(@"server=BARNAMERIZI3\SQLBARNAMERIZI;Initial Catalog=BrandDB;Integrated Security=True");

}

catch (SystemException ex)
{

MessageBox.Show(ex.Message);

}


papulateListBox1();

}

private void papulateListBox1()
{

try
{

strSQL = "SELECT * FROM TblData";

da = new SqlDataAdapter(strSQL, con);

ds = new DataSet();

con.Open();

da.Fill(ds, "TblData");

con.Close();

listBox1.DataSource = ds.Tables["TblData"];

listBox1.DisplayMember = "NameBr";

listBox1.ValueMember = "CodeBr";

}

catch (SystemException ex)
{

MessageBox.Show(ex.Message);

}
}

متد بالا لیست باکس رو با نام دیسک پر میکنه .


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

private void listBox1_Click(object sender, EventArgs e)
{
try

{

strSQL = "SELECT * FROM TblData WHERE CodeBr = @CodeBr";

da = new SqlDataAdapter(strSQL, con);

da.SelectCommand.Parameters.Add("@CodeBr", SqlDbType.Int).Value = listBox1.SelectedValue;

ds = new DataSet();

con.Open();

da.Fill(ds, "TblData");

con.Close();

byte[] arrPic = (byte[])(ds.Tables["TblData"].Rows[0]["PicDisk"]);

MemoryStream ms = new MemoryStream(arrPic);

pictureBox4.Image = Image.FromStream(ms);

}

catch (SystemException ex)

{

MessageBox.Show(ex.Message);


}
}



حالا می خوام با کلیک روی اسمهای موجود در لیست باکس، دیگر مشخصات دیسک هم دیده بشه مثل گرید و همچنین یک لینک لیبل که مسیر فایل اکسل در آن میباشد.
یک قسمت هم واسه جستجو نوشتم که به این صورت است:


private void SrchNameFrm_Load(object sender, EventArgs e)
{
try
{

con = new SqlConnection(@"server=BARNAMERIZI3\SQLBARNAMERIZI;Initial Catalog=BrandDB;Integrated Security=True");

}

catch (SystemException ex)
{

MessageBox.Show(ex.Message);

}


AutoComp();
}



private void AutoComp()
{

db.con_st = (@"server=BARNAMERIZI3\SQLBARNAMERIZI;Initial Catalog=BrandDB;Integrated Security=True");
SqlDataReader dr;
dr = db.Select("select * from TblData where NameBr like '%"+txtSrch.Text+"%'");
AutoCompleteStringCollection auto = new AutoCompleteStringCollection();
while (dr.Read())
{
auto.Add((string)dr["NameBr"]);
}
dr.Close();
txtSrch.AutoCompleteCustomSource = auto;
}




در این قسمت اول هر اسمی که در تکست باکس تایپ بشه اگه در دیتابیس موجود باشه رو نشون میده این هم عکسش:

http://upload.tehran98.com/img1/ai22zpqcove24uebjsh.jpg
حالا نمیدونم چه کدی باید بنویسم تا وقتی روی search کلیک میشه عکس و مشخصات هم در فرم وارد بشه!

multi-site
چهارشنبه 30 اردیبهشت 1394, 18:11 عصر
با سلام من بگم که نوبم چطوری میتونم یه مقداری رو از دیتابیس رو لیبل نشون بدم؟؟؟
برای مثال من تو جدول یوزر دیتا بیسم یک رکورد دارم و هر رکورد تشکیل شده از مجموعه ای فیلد من میخام مثلا رکوردی که ای دی 2 را دارد یوزر اون رو تو لیبیل نشان بدهم؟؟

ebrahim.rayatparvar
چهارشنبه 30 اردیبهشت 1394, 18:48 عصر
سلام شما باید کد sql رو به این صورت بزنی :


select user form tabaleName where id='2'


user : اسم فیلد یوزر
id : اسم فیلد id
tabaleName اسم جدولی که شما این فیلد ها داخل دارید.