Qanday qilib men mavjud bo'lgan birlamchi kalit identifikatorini kiritishga urinmasligini kafolatlay olaman?

SQL ma'lumotlar bazasiga chorva mahsulotini qo'shadigan ilovam bor.

Hozirgi vaqtda foydalanuvchi PetIDsning mavjudligini bilishi kerak va shuning uchun nima qilish kerakligini bilish kerak. Agar foydalanuvchi allaqachon mavjud identifikatorni kiritishga harakat qilsa, dasturda xato bo'ladi.

Menimcha, Petit (yuqori matnli quti) qiymatiga avtomatik tarzda sahifa yukida qaror qabul qilinadigan qiymat kerak, bu qiymat allaqachon mavjud qiymat bilan to'qnashuvga sabab bo'lmaydi ...

Kimdir yordam berishi mumkin? Buni qanday qilish kerakligini bilmayman

Men mavjud bo'lgan PetIDlar uchun SQL ma'lumotlar bazasini avtomatik ravishda qidirish uchun page_load kerak, eng kam qiymat bilan birini tanlang va matn qutisiga avtomatik ravishda, foydalanuvchi uchun tayyor bo'lishi kerak (shuning uchun foydalanuvchining foydalanuvchi emas, t allaqachon olingan) ...

Picture of current Pets table data Picture of web application

3
ExecuteNonQuery ma'lumotlar bazasida o'zgartirilgan satr sonini qaytaradi. Birlamchi kalit o'rnatilganida, ma'lumotlar bazasi ExecuteNonQuery bilan quyidagilardan birini bajaradi: 1) Insert: key ma'lumotlar allaqachon bazada bo'lganda nolga qayting. Keyinchalik, qiymatni o'zgartirish uchun Update ni ishlatishingiz kerak. 2) Update: key ma'lumotlar bazasida bo'lmasa, nolni qaytaradi. Keyin yangi qiymat kiritish uchun Qo'shish-ni ishlatishingiz kerak.
qo'shib qo'ydi muallif jdweng, manba
Mavjud identifikatorni qidirish orqali nimani nazarda tutasiz? Oldindan yaratilgan identifikatorlar bormi yoki siz oxirgi id + 1ni nazarda tutasizmi? Boshqa hisobga ko'ra, hisobga olish qiymatidan foydalaning.
qo'shib qo'ydi muallif Crowcoder, manba
qo'shib qo'ydi muallif mjwills, manba
@BingoDingo Nima uchun IDENTITY ustunidan foydalanishni istamaysizmi, deb bizga gaplasha olasizmi?
qo'shib qo'ydi muallif mjwills, manba
Qisqa javob (osonlik bilan) mumkin emas. Imkoningiz bo'lsa, tasavvur qiling. Aytaylik, ma'lumotlar bazasida 6 ta uy hayvonlari bor edi. Siz va biz ikkalamiz ham dasturni yuklaymiz. Har birimiz uchun qanday chorva mollari ko'rsatilishi kerak? Endi 100 foydalanuvchi mavjud bo'lsa nima bo'ladi? Endi @ JesúsLópez usuli yordamida siz foydalanishingiz mumkin - lekin har bir kishi dasturni yuklaganida bo'shliqlar yaratadi . Buni mijozdan o'ylab ko'ring
qo'shib qo'ydi muallif mjwills, manba
Chiqarish moddasi kiritilgandan so'ng id uchun hisobga olish qiymatini olishingiz mumkin emas, idni qo'lda kiritish kerak.
qo'shib qo'ydi muallif Suraj Kumar, manba
@mjwills bu dublikat emas
qo'shib qo'ydi muallif BingoDingo, manba
@kennyzx ma'lumotlar bazasi avtoto'ldirish usuli bilan tasdiqlanmaydi, men xato qilaman.
qo'shib qo'ydi muallif BingoDingo, manba
@mjwills balki siz mening savolimni tushunolmaysiz, qanday qilib yuklanadigan sahifada yuklamani kutib o'tirgan kutubxonaga ega bo'lishim mumkin? Shuningdek, foydalanuvchi uni o'zgartira olmaydi.
qo'shib qo'ydi muallif BingoDingo, manba

5 javoblar

Ma'lumotlaringizni kiritish va hisobga olish ma'lumotlari bazasiga qo'shilgandan so'ng IDni qaytarish odatiy holdir (Id maydonida Hisobga kirish qo'shish orqali).

Agar siz keyingi raqamni ko'rishni xohlasangiz, ma'lumotlar yaratilmagunga qadar ID uchun ID raqamini kiriting va SQL sever qatorini yarating. Yaratilish sahifasida ko'rsatiladigan navbatdagi raqamni qaytarish uchun saqlangan protsedurani yarating

1
qo'shib qo'ydi

PetIdni identifikatsiyalash ustuni sifatida quyidagi tarzda yaratishingiz mumkin:

[PetId] [int] IDENTITY(10,1) NOT NULL

Shunday qilib, uni qo'l bilan qo'shishingiz shart emas, har bir Pet qo'shig'ini qo'shsangiz, PetId avtomatik tarzda yaratiladi va bu noyob bo'ladi. Shunday qilib, PetId bilan hech qanday to'qnashuv bo'lmaydi.

Bu erda 10, birinchi Id raqami va 1 oilangizning qanday o'sishini bildiradi.

Hurmat bilan, Amaliy

1
qo'shib qo'ydi
Ha, foydalanuvchi o'z xohishlariga ko'ra PetIdni saqlashni xohlagan holatda bo'lishi mumkin. Agar foydalanuvchi bu foydalanuvchini bezovta qilmasa, uni uni identifikatsiya qilish ustuni qilib olamiz.
qo'shib qo'ydi muallif Pratik Somaiya, manba

Mavjud qiymatlarni tekshiradigan va foydalanuvchi kiritilgan PetID-ning mavjud yoki yo'qligini bildiradigan, TextChanged-ga qo'shing.

1
qo'shib qo'ydi

Bitta variant variantni ishlatish bo'ladi:

CREATE SEQUENCE pet_id_seq START WITH 7

I'm starting it with 7 because it is the first available pet_id

Keyin, sahifa yukida quyidagi so'rovni bajarish ketma-ketlikdagi keyingi qiymatni oling:

SELECT (NEXT VALUE FOR pet_id_seq) AS next_pet_id

Va pet_id matn qutisidagi so'rov bilan qaytarilgan qiymatni ko'rsating.

Bu yondashuv bitta kamchilikka ega, u bo'shliqni ishlab chiqaradi, agar siz sahifani ochsangiz, lekin aslida chorva satrini kiritmasangiz, id abadiy yo'qoladi. Lekin, menimcha, senga g'amxo'rlik qilish kerak emas, ko'p sonli raqamlar bor, siz ularni iste'mol qilmoqchi emassiz.

0
qo'shib qo'ydi

Id sütununu avtomatik ravishda oshirish uchun sozlang va foydalanuvchini unga kiritishiga yo'l qo'ymang, ma'lumotlar bazasini o'zi uchun hal qilsin. Yoki siz identifikatorning ustun turini o'zgartirishingiz va yangi kod yaratish uchun Guid.NewGuid() dan foydalanishingiz mumkin.

0
qo'shib qo'ydi