PDA

View Full Version : متغیر Integer که مقدار Null را بپذیرد



majid_vb_2008
جمعه 16 مرداد 1388, 10:49 صبح
سلام دوستان

چجوري مي شه يك متغير از نوع انتيجر را با null پر كرد

ممنون از توجهتون

MahmoudiNik
جمعه 16 مرداد 1388, 11:42 صبح
سلام
فکر کنم با دستور مثلا:
a=nothing
بشه امتحان نکردم اما فکر کنم جواب بده.:متفکر:

majid_vb_2008
جمعه 16 مرداد 1388, 14:07 عصر
دوستان ديگه نظري ندارن

اين كه جواب نداد

hossein-khoshseyar
جمعه 16 مرداد 1388, 19:22 عصر
مطمئن نیستم یه امتحان بکن



try
x=y/0
end try

majid_vb_2008
چهارشنبه 04 شهریور 1388, 22:56 عصر
من هنوز نتيجه نگرفتم كسي بلد نيست

Hossis
چهارشنبه 04 شهریور 1388, 23:35 عصر
Dim j As Integer = 0

majid_vb_2008
چهارشنبه 04 شهریور 1388, 23:45 عصر
Dim j AsInteger = 0

اين كه شد Integer

من اينو براي اينجا لازم دارم


con.Open()
strsql = "SELECT MAX(id) FROM List"
com = New SqlCommand(strsql, con)
A = com.ExecuteScalar
con.Close()

وقتي بانك اطلاعاتي خالي باشه مقدار Null بر مي گردونه

pirmard
چهارشنبه 04 شهریور 1388, 23:54 عصر
Dim j AsInteger = 0اين كه شد Integer

من اينو براي اينجا لازم دارم


con.Open()
strsql = "SELECT MAX(id) FROM List"
com = New SqlCommand(strsql, con)
A = com.ExecuteScalar
con.Close()وقتي بانك اطلاعاتي خالي باشه مقدار Null بر مي گردونه

تایپ های معمول نمی تونن null بشن .
برای تعریف در اینگونه موارد باید از تایپ های nullable استفاده کنید
به این صورت :

Dim M As Nullable(Of Integer)

و یا اینکه یه علامت سوال بعد از نوع قرار بدین :
Dim M1 As Integer?

حالا می تونین این کد رو روش امتحان کنین :
MsgBox(M1.HasValue)

برای کدی هم که مثال زده بودید می تونین خروجی رو با hasvalue چک کنین . اگر true بود کارهای لازمه رو انجام بدین و در غیراینسورت (یعنی اگر false بود که به معنی Null بود خروجیه) روال موردنظر رو پی بگیرین.
//
ضمنا تا جایی که می دونم nothin با null فرق داره . چون دیدم یکی از دوستان گفته بود متغیر رو nothing کنین.
//

anooshiran
پنج شنبه 05 شهریور 1388, 01:25 صبح
سلام دوست عزيز

وقتي شما يك متغير عددي را nullable تعريف ميكنيد باز هم همان nothing است و مفهوم واقعي null را ندارد

با كدهاي زير تست كنيد



Dim M As Nullable(Of Integer)
If M.Equals(DBNull.Value) Then
MsgBox("Null")
ElseIf M.Equals(Nothing) Then
MsgBox("Nothing")
Else
MsgBox("else")
End If



در صورتيكه حتي از logic operator ها هم در حالت assign كردن نمي تونيد استفاده كنيد

در ضمن ميشه بگيد اين كد را از كجاي vb.net آورديد؟؟؟



dim i as integer ?

navid_8x
پنج شنبه 05 شهریور 1388, 02:15 صبح
Integer اصلا reference type نیست که null بشه.می تونی اون رو به صورت object تعریف کنی.


dim a as object
a=23
a=nothing

pirmard
پنج شنبه 05 شهریور 1388, 03:10 صبح
وقتي شما يك متغير عددي را nullable تعريف ميكنيد باز هم همان nothing است و مفهوم واقعي null را ندارد

با كدهاي زير تست كنيد



Dim M As Nullable(OfInteger)
If M.Equals(DBNull.Value) Then
MsgBox("Null")
ElseIf M.Equals(Nothing) Then
MsgBox("Nothing")
Else
MsgBox("else")
EndIf

در صورتيكه حتي از logic operator ها هم در حالت assign كردن نمي تونيد استفاده كنيد



به دلیل اینکه تمام متغیرها به صورت پیشفرض nothing هستن و نباید هم null باشه.
و دقیقا بهخاطر همین موضوع بهتر دیدم از hasvalue استفاده بشه . خط آخر پست قبلیم هم خواستم در مورد فرق null و nothing پیشنهاد کنم که بیشتر بحث کنیم، دیدم زیاد ربطی به سوال ایشون نداره.




در ضمن ميشه بگيد اين كد را از كجاي vb‎‎.Net آورديد؟؟؟



dim i as integer ?

فکر می کنم ایراد کد شما از فاصله ی بین علامت ؟ و integer باشه .
http://msdn.microsoft.com/en-us/library/ms235245.aspx


/
نظرتون در مورد این کد چیه ؟

Structure ExStruct
Public ExMem As Boolean
End Structure


Dim ExInstance As ExStruct = Nothing
If ExInstance.Equals(Nothing) Then
MsgBox("ExInstance is nothing")
Else
MsgBox("ExInstance isnt nothing")
End If


Dim ExNullable As Integer = Nothing
If ExNullable.Equals(Nothing) Then
MsgBox("ExNullable is nothing")
Else
MsgBox("ExNullable isnt nothing")
End If

anooshiran
پنج شنبه 05 شهریور 1388, 04:09 صبح
به دلیل اینکه تمام متغیرها به صورت پیشفرض nothing هستن و نباید هم null باشه.
و دقیقا بهخاطر همین موضوع بهتر دیدم از hasvalue استفاده بشه . خط آخر پست قبلیم هم خواستم در مورد فرق null و nothing پیشنهاد کنم که بیشتر بحث کنیم، دیدم زیاد ربطی به سوال ایشون نداره.



فکر می کنم ایراد کد شما از فاصله ی بین علامت ؟ و integer باشه .
http://msdn.microsoft.com/en-us/library/ms235245.aspx


/
نظرتون در مورد این کد چیه ؟

سلام دوست عزيز

در مورد integer? حق با شماست ولي اين از امكانات 2008 است و در 2005 امكان پذير نيست. و بنده هنوز با 2008 در گير نشده ام. البته بنا به دلائل خودم

در مورد بحث در باره null و nothing هم بنظرم بحث جالبي است به اين دليل كه برخي از دوستان فرق خاصي براي آن قائل نيستند.

و در مورد كدهايي كه مطرح كرديد. نمي دانم منظورتان از آن سئوال چه بود ولي كد شما


Dim ExInstance As ExStruct = Nothing


در ست مانند اين كد است


Dim ExInstance As ExStruct


يعني nothing تغييري در مقدار پيش فرض آيتم boolean آن نمي دهد چون شما ExMem را معادل nothing قرار نداده ايد و بدين دليل است كه شما وقتي آن را با nothing مقايسه مي كنيد ، ارزش آن nothing نيست بلكه false است.

ولي حال بياييد و اين كد را اينگونه مقايسه كنيد



Dim ExInstance As Boolean = Nothing

حال قضيه كاملا فرق مي كند و ارزش ExInstance واقعا nothing است

naser_feb8646
پنج شنبه 05 شهریور 1388, 04:15 صبح
سلام
دوست عزیز شما ابتدا یک متغیر از نوع Object تعریف کنید و مقدار کوئری SQL را در داخل آن بریزید سپس با یک دستور شرطی مقدار متغیر Object را چک کنید اگر پر بود با دستور Ctype مقدار اون رو به یک متغیر Integer تبدیل کنید

Mani_rf
پنج شنبه 05 شهریور 1388, 15:01 عصر
به نظر من هیچکدوم از این کارا لازم نیست (البته همش درسته ها) .

شما برای تبدیل مقدار Null که از دیباتیس می گیرید فقط کافی است که مقدار ورودی را به Integer تبدیل کنید.




con.Open()
strsql = "SELECT MAX(id) FROM List"
com = New SqlCommand(strsql, con)
A = Val(com.ExecuteScalar)
con.Close()