PDA

View Full Version : مشکل در جستجو در بانک اطلاعات



googoli
چهارشنبه 23 آذر 1390, 21:30 عصر
با سلام خدمت اساتید گرامی
من یک جستجو نوشتم ولی نمی دونم چرا وقتی تو برنامه اجرا می کنم هیچ جوبی نمی گیرم ازش
این هم کدهایی که نوشتم

private void Search(string SearchItem)
{
objcon.cmd = new SqlCommand("Search");
objcon.cmd.Connection = objcon.con;
objcon.Open();
objcon.cmd.CommandType = CommandType.StoredProcedure;
objcon.cmd.Parameters.Add("@SearchItem", SqlDbType.NChar).Value = SearchItem;
objcon.Dadapter.SelectCommand = objcon.cmd;
objcon.cmd.ExecuteNonQuery();
objcon.Dset = new DataSet();
objcon.Dadapter.Fill(objcon.Dset, "TblProject");
objcon.Dtable = objcon.Dset.Tables["TblProject"];
dgv.DataSource = objcon.Dtable;
objcon.Close();
}



private void btnFind_Click(object sender, EventArgs e)
{
try
{
if (txtsearch.Text == "")
project_Load(null, null);
else
{
Search(txtsearch.Text);
}
}
catch (Exception ex)
{
MessageBox.Show("Error: \n\t" + ex.Message);
}
}



ALTER PROCEDURE [dbo].[Search]

@searchItem nvarchar(50)
AS
BEGIN

SET NOCOUNT ON;


SELECT * from TblProject where Title like @searchItem
END

mmd2009
پنج شنبه 24 آذر 1390, 22:11 عصر
با سلام

این طرز نوشتن کدها مناسب نیست. حتی خوندنش هم سخته. حداقل اینه ادم خسته میشه با دیدنشون. پیشنهاد میکنم به لینک اول امضای من برید و اموزش شماره 2 رو دانلود بکنید که در اونجا شیوه ی درست نوشتن یک کلاس برای دستکاری داده ها نوشته شده است.

موفق باشید

googoli
جمعه 25 آذر 1390, 19:47 عصر
ممنون از اموزش شما استفاده کردم و سعی می کنم در کد نویسی دقت بیشتری داشته باشم چون تازه من با مفاهیم شی گرایی اشنا شدم و برنامه نویسی رو شروع کردم از این روش ها استفاده می کنم

googoli
جمعه 25 آذر 1390, 21:12 عصر
به روشی که شما یادم دادید سورسم رو تغییر دادم ولی باز هم نتیجه نگرفتم این هم کدی که با کمک شما نوشتم

private void btnFind_Click(object sender, EventArgs e)
{
_dataAccess.CreatCommand("[dbo].[Search]", CommandType.StoredProcedure);
_dataAccess.Addparameter("@searchItem", txtOnvan.Text.Trim());
_dataAccess.CmdExecuteNonQuery();
dgv.DataSource = _dataAccess.ExecuteDatatable();

}


این هم اس کیوال که قبلا هم گذاشتم


USE [hesabdari]
GO
/****** Object: StoredProcedure [dbo].[Search] Script Date: 12/16/2011 21:29:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Search]

@searchItem nvarchar(50)
AS
BEGIN

SET NOCOUNT ON;


SELECT * from TblProject where Title like @searchItem
END

mmd2009
جمعه 25 آذر 1390, 23:45 عصر
خب ببینید الان کدتون واقعا خوانا تر شده. الان شما یک راه حل دارید برای این مشکل اونم اینه که SP رو تو خود sql تست کنید با مقداری که تو برنامه بهش میدید ببینید ایا واقعا مقداری که میدید جواب میگیرید تو خود sp اگر جواب گرفتید و از این بابت مشکلی نبود اونوقت بانکتون رو همراه با برنامتون رو بذارید تا یک نگاهی بهش بکنیم. چون از نظر من کد شما اصلا موردی نداره و اگر موردی باشه تو sp هست یا داده های جدول

موفق باشید

zarrinnegar
شنبه 26 آذر 1390, 00:06 صبح
این خط رو توی

SELECT * from TblProject where Title like @searchItem

sp تغییر بده به این خط

SELECT * from TblProject where Title like '%'+@searchItem+'%'

mmd2009
شنبه 26 آذر 1390, 00:12 صبح
این خط رو توی

SELECT * from TblProject where Title like @searchItem

sp تغییر بده به این خط

SELECT * from TblProject where Title like '%'+@searchItem+'%'


یک توضیح در مورد این خط به این دوستمون بگم شاید مسئله براشون بازتر بشه

کدی که اقای zarrinnegar نوشتن یک دستور Like هست که داده هایی رو میاره که در یک فیلد Title حتما باید مشابه اون وجود داشته باشه ولی کد شما با دستور = هیچ تفاوتی نداره اگر منظورتون از اول این بوده که داده های بین یک فیلد هم مد نظر شما بوده پس کد رو به این صورت تغییر بدید چون روش درست به این شکل هست. هر کدوم از درصد ها رو برداری فرضا سمت چپی رو برداری دستور طوری انجام میشه که شروع مقدار فیلد باید با مقدار ورودی برابر باشه یا اکر اخری رو برداری میگی که پایان داده ی فیلد باید دقیقا عین مقدار ورودی باشه

امیدوارم توضیحات مفید باشه

موفق باشید

zarrinnegar
شنبه 26 آذر 1390, 00:14 صبح
من هم چون توی دستورش like داشت اونو نوشتم
ممنون از توضیحات شما