PDA

View Full Version : حرفه ای: چک کردن قبل ثبت اطلاعات در دیتابیس sql



behrooz69
شنبه 24 آذر 1397, 16:33 عصر
دوستان سلام ، با این کد ما میایم اطلاعات رو ثبت میکنیم توی دیتابیس درست ؟؟؟

گاهی وقتا برای اینکه تکراری ثبت نشه باید ، قبلش چک شه ، و ظاهرا با یه Select قبل Insert انجام میشه ، خوشحال میشم راهنماییم کنید :خجالت:

Try

cmd = New SqlCommand
cmd.Connection = con
con.Open()


cmd.CommandText = "INSERT INTO TblRegisterCode (SourceLang,MozoCode,SourceCode)
VALUES (@SourceLang,@MozoCode,@SourceCode)"


cmd.Parameters.AddWithValue("SourceLang", Cbo_Source_Lang.Text)
cmd.Parameters.AddWithValue("MozoCode", Txt_Mozoe_Source.Text)
cmd.Parameters.AddWithValue("SourceCode", Txt_Source_Code.Text)




If con.State = ConnectionState.Open Then


cmd.ExecuteNonQuery()
MessageBox.Show("کد جدید ثبت")


End If


Catch ex As Exception
MsgBox("خطا در دریافت اطلاعات" & ex.Message)
Finally
con.Close()
End Try

behrooz69
یک شنبه 25 آذر 1397, 12:11 عصر
از این کد استفاده میکنم ولی اررور دارم ، چک میکنه که هست ، ولی بخواد بعدش Insert کنه اررور داره و به باز بودن datareader گیر میده و چند باری بستمش ولی بازم اررور دارم ، راهنمایی دوستان

If Txt_UserName.Text = Nothing Then MessageBox.Show(" usernamo bezan ")
Txt_UserName.Focus()
Else
Try


cmd = New SqlCommand
cmd.Connection = con
con.Open()


strsql = "select UserName from TblLogin where UserName=@UserName and [PassWord]=@PassWord"


cmd = New SqlCommand(strsql, con)
cmd.Parameters.AddWithValue("@UserName", Txt_UserName.Text)
cmd.Parameters.AddWithValue("@Password", Txt_PassWord.Text)
dr = cmd.ExecuteReader()


If con.State = ConnectionState.Open Then
If dr.Read Then
MessageBox.Show(" hastesh")
Else


cmd.CommandText = "INSERT INTO TblLogin (UserName,PassWord,UserLevel)
VALUES (@UserName,@PassWord,@UserLevel)"


cmd.Parameters.AddWithValue("UserName", Txt_UserName.Text)
cmd.Parameters.AddWithValue("PassWord", Txt_PassWord.Text)
cmd.Parameters.AddWithValue("UserLevel", Cbo_UserLevel.Text)




If con.State = ConnectionState.Open Then


cmd.ExecuteNonQuery()
MessageBox.Show("Reg shod")


End If
End If
End If




Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
con.Close()
End Try


End If

hamidrezax1
چهارشنبه 28 آذر 1397, 11:37 صبح
سلام دوست عزیز کانکشنت رو بعد هر بار استفاده ببند مشکل حل میشه

محمد آشتیانی
پنج شنبه 29 آذر 1397, 15:13 عصر
سلام
طبیعتا در جدول شما فیلدی هست که مقدارش باید یونیک باشه (یکتا) و این رو از طریق مشخص کردن ایندکس روی جدول میشه انجامش داد. اگر همچین چیزی دارید ، با insert کردن رکورد تکراری ، Sql Server یک Exception صادر خواهد کرد و شما می تونید توی بلوک Try Catch استثنا رو مدیریت کنید (لیست Exception های Sql Server توی نت پیدا میشه).
با این توضیحات ، نیازی به Select قبل از عمل Insert وجود نداره.

hrj1981
پنج شنبه 29 آذر 1397, 18:28 عصر
با درود
من اوایل کارم با دات نت برای کار با بانک اطلاعاتی مثل همین نمونه سورس دوستمون کد ها را مستقیم تو برنامه مینوشتم که هم حجم برنامه بالا میرفت هم تو پشتیبانی و اراءه سرویس پکهای اصلاحی اذیت کننده میشد.یکبار از یکی از گزینه های آنالیز کد خود vs که استفاده کردم همه این مدل کد نویسی من را با هشدار ضعف امنیتی گزارش داد و پیشنهاد داد اونها رو داخل رویه های ذخیره شده و یا فانکشنهای خود sql بنویسم و بعد تو برنامه اونها رو فراخوانی کنم.
برای مثال این دوستمون خیلی راحت میشه تو sql با یه if exsits و یا روشهای دیگه چک کرد که ایا رکورد قبلا بوده یا نه .اگر بودهupdate استفاده بشه و در غیر اینصورت insert

emamgoli
جمعه 30 آذر 1397, 13:12 عصر
جلوگیری از ثبت تکراری اطلاعات

بعد از فراخوانی بانک اطلاعاتی با استفاده از فیلتر (مثلاْ تاریخ) و قبل از ثبت اطلاعات از اعتبار سنجی و کد زیر استفاده میکنیم

If Ds.Tables("Me_Table").Rows.Count > 0 Then MessageBox.Show("This date is already registered", "Err", MessageBoxButtons.OK, MessageBoxIcon.Error) : Exit Sub

در این کد در صورت برقرار بودن شرط برنامه یک پیغام میده و از دستور خارج میشه

behrooz69
دوشنبه 03 دی 1397, 11:52 صبح
سلام
طبیعتا در جدول شما فیلدی هست که مقدارش باید یونیک باشه (یکتا) و این رو از طریق مشخص کردن ایندکس روی جدول میشه انجامش داد. اگر همچین چیزی دارید ، با insert کردن رکورد تکراری ، Sql Server یک Exception صادر خواهد کرد و شما می تونید توی بلوک Try Catch استثنا رو مدیریت کنید (لیست Exception های Sql Server توی نت پیدا میشه).
با این توضیحات ، نیازی به Select قبل از عمل Insert وجود نداره.


ممنونم از شما ، سعی میکنم پیدا کنم ، و ظاهرا با IFexist این عمل تست میشه ، رفرنس ایرانیا پیدا نشد ، ممنونم ازتون