PDA

View Full Version : پیغام در هنگام insert کردن رکورد تکراری



gole_maryam
یک شنبه 03 مهر 1384, 11:01 صبح
با سلام
من یک برنامه نوشته ام که امکان insert کردن رکورد را دارد ولی این محدودیت را هم دارد که نمی تواند رکورد تکراری را به بانک insert کند که البته این کار را انجام نمی دهد ولی می خواستم پیغامی را به کاربر بدهد که به خاطر تکراری بودن اطلاعات رکورد ثبت نشده است اما نمی دانم چطوری باید چک کنم که رکورد تکراری وارد نشده است و سپس پیغام مناسب را روی صفحه نمایش دهد دوستان عزیز خواهش می کنم شما به من کمک کنید تا این مشکل را بر طرف کنم خواهشمندم کد این قسمت را البته به زبان vb برای من بنویسید از همه شما ممنون هستم
با تشکر

ealireza
یک شنبه 03 مهر 1384, 12:42 عصر
خوب این امر در جاهایی غیر قابل پیش گیری است
مثلا در موردی که از Ntext و .. استفاده کرده باشید ...

ولی میتوانید تک تک فیلد ها رو چک کنید ...
برای این کار یک بار Query بگیرید بعد با Reader چک کنید
مانند


Cstr.open
Dim Cmd as sqlCOmmand
Cmd.connection = CSTR
cmd.commandtext = "Select * from tabel Where id=......"
dim reader as sqldatareader = cmd.executereader
if reader.read
....
Some code ...
....
response.write ("ERROR ... !")
else
reader.close
some code....
end if
cstr.close


در کل میتوانید از این راه چک کنید
موفق باشید

dalaho
یک شنبه 03 مهر 1384, 12:44 عصر
شما باید مقایسه را بر اساس یک فیلدی که یونیک است انجام دهید
بدین صورت که محتویات text bax را با آن فیلد مقایسه کنید
و در صورت برابری رکورد جدید ثبت نشود

gole_maryam
یک شنبه 03 مهر 1384, 15:11 عصر
من مقایسه را بر اساس یک فیلد یونیک انجام داده ام و در واقعیت هم در بانک اطلاعاتی اصلا رکورد تکراری وارد نمی کند ولی من می خواهم برنامه طوری باشد که با زدن دکمه insert اگر رکوردی که می خواهد ثبت کند تکراری باشد یک پیغام مناسب را مثلا در یک label نمایش دهد مشکل من این است که من نمی دانم چطوری این کار را انجام دهم
با تشکر

dalaho
یک شنبه 03 مهر 1384, 16:04 عصر
بهترین راه استفاده از try{}
catch(){}
است در قسمت try دیتا رو وارد کن و در صورتی که تکراری بود در catch خطا رو چاپ کن

ealireza
یک شنبه 03 مهر 1384, 16:31 عصر
بله
همون دستور شرطی که گزاشتم اگر مثلا ID پیدا شد یک خطا چاپ میکنه ..

موفق باشید

gole_maryam
سه شنبه 05 مهر 1384, 21:38 عصر
من بزای insert کردن رکورد به بانک اطلاعاتی در sql یک پروسیجر نوشته ام و ان را در کد برنامه فراخوانی می کنم هما نطور که گفتم بر اساس دو فیلد چک می کند که رکورد تکراری نباشد و در صورت تکراری بودن ان را در بانک ثبت نمی کند ولی من نمی دانم به چه صورتی باید به کاربر پیغام دهم که رکورد تکراری است اگر لطف کنید و کد را به vb برای من بنویسید ممنون می شوم

ealireza
چهارشنبه 06 مهر 1384, 14:29 عصر
خوب همون ارسال دوم تو همین تاپیک گفتم دیگه ...

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

Navid7h
چهارشنبه 06 مهر 1384, 16:51 عصر
میتونید یک Store Procedure در SQL بنویسید سپس پارامترهای خود را به آن ارسال کنید
بعد در Store Procedure ابتدا چک کنید که فیلهای مرد نظر تکراری نباشند که اگر بودند میتوانید از یک داده برگشت شده استفاده کنید
مثلاً اگر تکراری بود Return -2 در غیر این صورت Return -1.
حالا در برنامه خود می توانید با توجه به مقدار برگشت شده از سمت SP پیغام مورد نظر خود را بدهید.

مثال کلی این روش چک کردن USERNAME است در هنگام ثبت نام یک کاربر جدید برای اینکه به او بگویید این Username توسط کاربر دیگری استفاده می شود.

gole_maryam
چهارشنبه 06 مهر 1384, 23:34 عصر
سلام کدی که من نوشته ام به این صورت است ولی error می دهد
dim conmydata as sqlconnection
dim cmdselect as sqlcommand
conmydata= new sqlconnection ("server=localhost;uid=sa;database=mybank")
cmdselect.commandtext="select * from mytabel where idno='" &textbox3.text & "' and stand_num='" &textbox5.text & "'"
dim reader as sqldatareader=cmdselect.executereader
if reader.read then
response.write("error ")
else
کد مربوط به insert

Behrouz_Rad
پنج شنبه 07 مهر 1384, 01:12 صبح
مراحل زیر را قدم به قدم انجام دهید.
ابتدا باید یک Stored Procedure در بانک SQL Server خود ایجاد کنید.
محتوای SP باید به شکل زیر باشد:


CREATE Procedure dbo.mySP
(
@username nvarchar(25)
)
AS
IF EXISTS(SELECT * FROM myTable WHERE strName = @username)
BEGIN
Select 'The Record Exists'
END
ELSE
BEGIN
Select 'The Record Doesnt Exists'
INSERT into myTable(strName) VALUES(@username)
END
GO

توضیح دستور T-SQL فوق:
Store Procedure ای با نام mySP ایجاد شده.
متغیری به نام username با حداکثر گنجایش 25 کاراکتر و از نوع nvarchar تعریف شده است.
با یک شرط IF و دستور EXISTS، وجود رکورد مورد نظر (نام کاربری) در فیلد strName جدول myTable بررسی می شود.
در صورت وجود رکورد، عبارت "The Record Exists" و در غیر اینصورت، عبارت "The Record Doesnt Exists" توسط SP برگشت داده می شود و رکورد در دیتابیبس ثبت می شود.
طریقه استفاده از SP فوق در کدنویسی برنامه:


Dim cnn As New SqlConnection("server=localhost;database=behi;Integrated Security=SSPI")
Dim cmd As New SqlCommand("mySP", cnn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@username", TextBox1.Text)
cnn.Open()
Dim strMessage As String = cmd.ExecuteScalar()
If strMessage = "The Record Exists" Then
Response.Write("Sorry! The User Name already Exists!")
ElseIf strMessage = "The Record Doesnt Exists" Then
Response.Write("Thanks For Your Registration!")
End If
cnn.Close()

توضیح کد فوق:
نام SP به عنوان اولین آرگومان به SqlCommand پاس داده می شود.
از آنجا که آرگومان اول SqlCommand، به طور پیش فرض یک دستور SQL را می پذیرد، با دستور cmd.CommandType = CommandType.StoredProcedure، نوع Command را SP تعیین کرده ایم.
پارامتر Command با انتساب مقدار TextBox1 به آن، مقداردهی می شود.
به دلیل برگشت مقدار رشته ای توسط SP، باید از متد ExecuteScalar شی Command استفاده کنید.
متد ExecuteNonQuery یک مقدار از نوع عدد صحیح را برگشت می دهد که بیانگر تعداد رکوردهایی است که تحت تاثیر فرمان SQL قرار گرفته اند.
مقدار برگشتی SP چک می شود و در نهایت پیغام متناسبی چاپ خواهد شد.
موفق باشید.

gole_maryam
دوشنبه 11 مهر 1384, 21:59 عصر
سلام
من می خواستم بدانم همین select را که چک می کند رکورد تکراری وجود دارد یا نه را در کد برنامه بنویسیم چگونه باید چک کنم که select نتیجه ای را در بر داشته است تا بعد از ان پیغام تکراری بودن رکورد را نمایش دهد اگر ممکن است کد این قسمت را به vb برای من بنویسید
با تشکر

gole_maryam
سه شنبه 12 مهر 1384, 00:29 صبح
سلام
دوستان عزیز خواهش می کنم مشکل من را حل کنید

Behrouz_Rad
سه شنبه 12 مهر 1384, 16:25 عصر
خواهر گرامی!
واقعا با دیدن اینگونه پاسخ از جانب شما، احساس استیصال بسیار می کنم.
هیچ وقت پایبند روش های قدیمی نباشید و در جستجوی راه های نوین بگردید.
مراحل عارض شده به خدمتتان را گام به گام انجام دهید و اطمینان حاصل کنید که موفق خواهید شد.
به امید سر بلندی و کامیابی شما در تمامی مراحل زندگی.