PDA

View Full Version : مشکل در نمایش داده بعد از یافته شدن



atabak_p
جمعه 08 خرداد 1388, 10:39 صبح
با سلام خدمت تمامی دوستان محترم

من با دستور strSql = "Select * from Ravanshenasi WHERE SH_S=" & txtDoc.Text

داده خودمو در بانک اطلاعاتی جستجو میکنم بعد از اینکه داده مورد نظر در بانک اطلاعاتی بافت شد زمانی که میخواد در اطلاعات هرکدوم از داده ها در textbox نمایش داده بشه اگه تمامی موارد موجود در بانک اطلاعاتی پر باشد بخوبی جواب میده و اگر یکی از خانه ها خالی باشه پیغام خطای InvalidCastException was unhandled رو میده و دربانک اطلاعاتی طوری تعریف کردم که فقط مقدار کلید هام نمیتونه خالی باشه حالا اگه یکی از این داده های خالی باشه چرا بقیه خانه هارو نمایش نمیده و پیغام خطا میده در ضمن کلا این قسمت کد رو براتون میزارم ممنون میشم کسی منو راهنمایی بکنه


Dim strCon As String
strCon = "Data Source=ATA-8203CDCB0FD;Initial Catalog=Asnad;Integrated Security=True"
Dim con As New SqlConnection(strCon)
con.ConnectionString = strCon
con.Open()
'-------------------------------- create command-------->>>>>>>2<<<<<
Dim strSql As String
Dim cmdsql As New SqlCommand



strSql = "Select * from Ravanshenasi WHERE SH_S=" & txtDoc.Text
cmdsql.Connection = con
cmdsql.CommandText = strSql
Dim DR As SqlDataReader
DR = cmdsql.ExecuteReader

If Not DR.HasRows = True Then

MsgBox("رکورد مورد نظر یافت نشد ", MsgBoxStyle.OkOnly + MsgBoxStyle.SystemModal, "جستجو")

txtHsearch.Text = ""
txtpzh_pa.Text = ""
txtOHelp.Text = ""
txtResearch.Text = ""
txtyear.Text = ""
txtMak.Text = ""
Else
DR.Read()
txtHsearch.Text = DR("Title")
txtpzh_pa.Text = DR("PZH_PA")
txtOHelp.Text = DR("OSM_OSR")
txtResearch.Text = DR("Student_MH")
txtyear.Text = DR("Year")
txtMak.Text = DR("University_City")
End If

anooshiran
جمعه 08 خرداد 1388, 16:15 عصر
سلام دوست عزيز

پيام خطاي InvalidCastException was unhandled زماني حادث مي گردد كه دو متغير ناهمگون را مي خواهيد به هم تبديل كنيد يا برابر هم قرار دهيد

براي مثال متغيري از نوع integer را مساوي "Test" قرار دهيد.

حال پيشتهاد اول من به شما اين است كه يكي از مقادير خال خود را در كد زير قرار دهيد و ببينيد چه اروري ميدهد. براي مثال




Try
txtHsearch.Text = DR("Title")
Catch ex As InvalidCastException
MsgBox(ex.Message)
End Try



پيام صادره احتمالا اين خواهد بود كه مقدار null يا empty قابل تبديل به string يا integer نيستند.

حال چون من اصولا دسترسي به database شما ندارم ، تنها چيزي كه به فكرم ميرسد تا مشكل شما حل شود اين ست كه null يا empty بودن هر فيلد را كنترل كنيد و اگر غير از اين بود ، مقدار را در textbox مربوطه قرار دهيد





If Not String.IsNullOrEmpty(DR("Title")) Then
txtHsearch.Text = DR("Title")
End If



اگر باز هم مشكلتان حل نشد يك backup از database خود را ضميمه كنيد تا بتوان برنامه را test نمود.

atabak_p
جمعه 08 خرداد 1388, 16:41 عصر
سلام دوست عزیز ممنون از راهنمایی خوبی که کردین از توضیحی که شما دادین متوجه شدم که در بانک اطلاعاتی من اشکال وجود دراه و حلش کردم یعنی نوع داده هارو به varchar تبدیل کردم مشکل حل شد
واقعا ممنونم

میخواستم یه سوال و یه درخواست ازتون بکنم ممنون میشم باز راهنماییم کنید

سوالم اینکه چطور دستور select ی برای چندین فیلد بنویسم که همزمان جسجتو بکنه واگه زمانی یکی یا چند تا از فیلدها خالی بود با بقیه فیلدها کار جستجو رو انجام بده به عنوان مثال

در جستجوی کتاب ما میگیم عنوان کتاب بعد نام نویسنده بعد سال انتشار و ... اگه کاربر فقط عنوان داد بره با عنوان جستجو کنه خیر عنوان و ناشر رو داد بره هردورو جستجو بکنه و ... ایا میشه این درخواستو تو یه Select نوشت

و درخواستم این بود که اگه اجازه بدین با استفاده از میلتون با شما بیشتر اشنا بشم و از راهنماییهاتون استفاده بکنم ممنون میشم

fatahi.un.co
یک شنبه 16 آبان 1389, 00:42 صبح
سلام دوست عزیز
آره میتوان جستجوی ترکیبی های متنوعی داشت.
من تمام جستجو های ترکیبی را با like انجام میدهم .اگر کاربر فیلدی را برای جستجو انتخاب کرد در نظر میگیرد و آگر نه با % به جای هر کاراکتر پر میکنم که تمام ستون های آن فیلد را در نظر می گیرد.
یک نمونه را برایتان ضمیمه می کنم.
ALTER PROCEDURE dbo.Select_Karjo_byMixed @nam nvarchar(15),@family nvarchar(15),@shsh [LTR_INLINE][LTR_INLINE][LTR_INLINE][LTR_INLINE]nchar(10),@skills nvarchar(20)
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
select *, (select count(skill) from tblMaharatKarjo,tblskill where (tblpersonal.idkarjo=tblmaharatKarjo.idkarjo)and(t blmaharatKarjo.idskill=tblskill.idskill)) as skills from tblpersonal,tblExtraInfoPersonal
where tblPersonal.idKarjo=tblExtraInfoPersonal.idkarjo and
(nam like @nam)and (family like @family) and(shSh like @shsh) and (tblPersonal.idkarjo =any(select idkarjo from tblMaharatKarjo,tblskill where (skill like @skills) and (tblmaharatKarjo.idskill=tblskill.idskill)))

/* SET NOCOUNT ON */
/* and (tblPersonal.idkarjo =any(select idkarjo from tblMaharatKarjo,tblskill where (skill like @skills) and (tblmaharatKarjo.idskill=tblskill.idskill)))*/
RETURN
یا جستجوی زیر
ALTER PROCEDURE dbo.Select_Karjo_byMixed @nam nvarchar(15),@family nvarchar(15),@shsh nchar(10),@skills nvarchar(20)
/*
(
@parameter1 int = 5,
@parameter2 datatype OUTPUT
)
*/
AS
select *, (select count(skill) from tblMaharatKarjo,tblskill where (tblpersonal.idkarjo=tblmaharatKarjo.idkarjo)and(t blmaharatKarjo.idskill=tblskill.idskill)) as skills from tblpersonal,tblExtraInfoPersonal
where tblPersonal.idKarjo=tblExtraInfoPersonal.idkarjo and
(nam like @nam)and (family like @family) and(shSh like @shsh) and (tblPersonal.idkarjo =any(select idkarjo from tblMaharatKarjo,tblskill where (skill like @skills) and (tblmaharatKarjo.idskill=tblskill.idskill)))

/* SET NOCOUNT ON */
/* and (tblPersonal.idkarjo =any(select idkarjo from tblMaharatKarjo,tblskill where (skill like @skills) and (tblmaharatKarjo.idskill=tblskill.idskill)))*/
RETURN