PDA

View Full Version : ذخیره کردن مقدار یک CheckBox در ستون از نوع bit در SQLSERVER



majid_cs
شنبه 02 تیر 1386, 23:39 عصر
سلام.
من این مسئله رو تو بخش Asp.net سرچ کردم ولی موضوعی مرتبط پیدا نکردم.
مشکل من اینه که میخوام اطلاعات حدود 17 تا چک باکس رو در 17 فیلد مرتبط از نوع bit در sqlserver ذخیره و بازیابی کنم.

هنگام بازیابی این اطلاعات مشکلی ندارم. روش کارم با این صورت هست که خاصیت checked هر چک باکس رو برابر با مقدار فیلد متناظر اون از dataset قرار میدم.

مشکل وقتی پیش میاد که میخوام مقادیر جدید چک باکس ها رو که ممکنه کاربر عوضشون کنه در sqlserver ذخیره کنم. تمامی مراحل انجام میشه و خطایی صادر نمیشه، ولی وقتی بانک رو چک میکنم هیچ تغییر جدیدی اعمال نمیشه.

جایی خوندم که باید ابتدا مقدار checked یک چک باکس تبدیل به Byte شده و بعد ذخیره بشه. ولی اینکار هم جواب نداد.

ممنون میشم اگه کسی منو راهنمایی کنه

javad3151
یک شنبه 03 تیر 1386, 07:40 صبح
جایی خوندم که باید ابتدا مقدار checked یک چک باکس تبدیل به Byte شده و بعد ذخیره بشه. ولی اینکار هم جواب نداد.
سوال پرسیدی و جواب خودت رو دادی!!



CType(yourcheckbox.Checked, Int32)

m.hamidreza
یک شنبه 03 تیر 1386, 14:50 عصر
توی page_load چک باکس هارو مقدار دهی می کنی ؟
اگه اره که یه button بزار کدرو تو OnClick باتن بنویس (کد fill کردن چک باکس ها رو) بعد امتحان کن ببین بعداز تغییر update میشن یا نه . اگه شدن اشکال از کدت نیست . . . . از اینه که توی page load مقدار می دی !

Alireza_Salehi
یک شنبه 03 تیر 1386, 17:42 عصر
سلام.
من این مسئله رو تو بخش Asp.net سرچ کردم ولی موضوعی مرتبط پیدا نکردم.
مشکل من اینه که میخوام اطلاعات حدود 17 تا چک باکس رو در 17 فیلد مرتبط از نوع bit در sqlserver ذخیره و بازیابی کنم.

هنگام بازیابی این اطلاعات مشکلی ندارم. روش کارم با این صورت هست که خاصیت checked هر چک باکس رو برابر با مقدار فیلد متناظر اون از dataset قرار میدم.

مشکل وقتی پیش میاد که میخوام مقادیر جدید چک باکس ها رو که ممکنه کاربر عوضشون کنه در sqlserver ذخیره کنم. تمامی مراحل انجام میشه و خطایی صادر نمیشه، ولی وقتی بانک رو چک میکنم هیچ تغییر جدیدی اعمال نمیشه.

جایی خوندم که باید ابتدا مقدار checked یک چک باکس تبدیل به Byte شده و بعد ذخیره بشه. ولی اینکار هم جواب نداد.

ممنون میشم اگه کسی منو راهنمایی کنه

کدتون رو بذارید ببینیم چرا عمل نمیکنه این طوری نمیشه نظر داد!

در ضمن معادل فیلد SQLServer Bit در دات نت نوع داده Boolean است و نه Byte !

SqlDbType Enumeration (http://msdn2.microsoft.com/en-us/library/system.data.sqldbtype.aspx)

اگر دستی Command نوشتید پارامتر بیت رو به این صورت باید وارد کنید هیچ نوع تبدیلی هم لازم ندارد:


sqlCommand1.Parameters.Add("@bitparam", SqlDbType.Bit).Value = CheckBox1.Checked;

majid_cs
دوشنبه 04 تیر 1386, 12:47 عصر
ممنون از دوستانی که جواب دادن


توی page_load چک باکس هارو مقدار دهی می کنی ؟
اگه اره که یه button بزار کدرو تو OnClick باتن بنویس (کد fill کردن چک باکس ها رو) بعد امتحان کن ببین بعداز تغییر update میشن یا نه . اگه شدن اشکال از کدت نیست . . . . از اینه که توی page load مقدار می دی !

نه اتفاقا توی رویداد کلیک یک button هستش. صفحه ای که دارم به این صورته که همانطور که گفتم 17 تا checkbox به کاربر نشون داده میشه. کاربر میتونه تیک چک باکس ها رو برداره یا بذاره و بعد دکمه save رو کلیک کنه. منتها مقادیر جدید checkbox ها ذخیره نمیشن.

کدی که نوشتم اینوریه:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim db As New SQLDatabase
Dim permission As New permission(db, CInt(User.Identity.Name))
Dim dr As DataRow
dr = permission.getrow()
dr("Description") = chkDescription.Checked
...
db.close()
End Sub

البته چک باکس ها 17 تا هستن که برای صرفه جویی فقط یکیشون رو تو کد آوردم.

روش کار با استفاده از dataset هستش. اطلاعات رو در dataset آپدیت میکنم و بعد با استفاده از dataadapter بانک رو بروز میکنم.


اگر دستی Command نوشتید پارامتر بیت رو به این صورت باید وارد کنید هیچ نوع تبدیلی هم لازم ندارد:

اگه بخوام پارامتری کار کنم باید یه تغییراتی تو کلاسم بدم. بنظرت بدون استفاده از پارامتر هم بشه پیاده سازی کرد؟

majid_cs
پنج شنبه 07 تیر 1386, 14:23 عصر
با تشکر از علیرضا صالحی

بجای اینکه مستقیما تغییرات dataset رو با استفاده از DataAdapter توی بانک ذخیره کنم، دستور Update رو بصورت پارامتری نوشتم و روی بانک اجرا کردم و جواب داد.

ولی آیا میشه بدون استفاده از پارامترها هم این کار رو کرد؟

Alireza_Salehi
پنج شنبه 07 تیر 1386, 17:05 عصر
با دیتاست هم این کار قابل انجامه، فرقی نمیکنه !

majid_cs
سه شنبه 12 تیر 1386, 10:51 صبح
با دیتاست هم این کار قابل انجامه، فرقی نمیکنه !

خاصیت checked چک باکس رو به چه نوع داده ای باید تبدیل کنم تا با دیتاست هم قابل انجام باشه؟

adhami
چهارشنبه 21 شهریور 1386, 11:23 صبح
با سلام خدمت دوستان
من هم می خواهم از چک باکس در گریدویو استفاده کنم و با تیک زدن یک چک باکس فیلد معادل آن در بانک هم تیک بخوره . از کد زیر برای انجام این کار استفاده کردم ولی در بانک هیچ تغییری رو نمی بینم .


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim gr As GridViewRow
Dim boolCheck As Boolean = False
For Each gr In g1.Rows
Dim chk As CheckBox = CType(gr.FindControl("checkbox1"), CheckBox)
If chk.Checked = True Then
boolCheck = True
Dim strid As String = g1.DataKeys(gr.RowIndex)("id").Value
Dim con As New System.Data.SqlClient.SqlConnection("Data Source=17693-2248-MAZA;Initial Catalog=AMOZESH;Integrated Security=True")
Dim cmd As New System.Data.SqlClient.SqlCommand()
cmd.Connection = con
cmd.CommandType = Data.CommandType.Text
cmd.CommandTimeout = 60
cmd.CommandText = "UPDATE sabt861 SET elam=@elam WHERE ID='" & ID & "' "
cmd.Parameters.AddWithValue("@elam", System.Data.SqlDbType.Bit).Value = chk.Checked
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End If
Next
End Sub

منتظر راهنماییهای شما هستم .