Рейтинг:
2
phil.o
Автоматическая нумерация обычно выполняется на стороне сервера, а не на стороне клиента. Потому что с помощью метода на стороне клиента, если есть несколько клиентов, ничто не гарантирует, что два клиента не получат один и тот же идентификатор одновременно.
Выполнение автоматической нумерации на стороне клиента-это анти-паттерн, который вы должны научиться избегать.
sql автоматически генерируемый идентификатор[^]
Amar chand123
тогда каково же решение этой проблемы
потому что, если я использую МС счетчик доступ есть проблема, если я удалить все данные, то счетчик не вариант сброса счетчика и доступа только для чтения
phil.o
Если вы удаляете какие-либо данные, вам не следует беспокоиться о наличии пропущенного значения в последовательности. Это никак не влияет ни на производительность, ни на достоверность данных. Это не проблема.
Amar chand123
Есть ли такой код, который может подсчитывать строки в таблице клиентов моей базы данных
чем мы добавим +1 и покажем в текстовом поле, чем я сохранил базу данных
потому что теперь я пытаюсь сохранить вручную данные в столбце autonumber access с помощью текстового поля c#, и данные успешно сохранены
phil.o
Как я уже объяснял, это неправильный способ сделать это таким образом. Пожалуйста, используйте автоматически увеличенный первичный ключ в базе данных и перестаньте полагаться на подсчет таблиц, чтобы получить следующий идентификатор.
Amar chand123
я нахожу метод и его работу
мою колонку базы данных Access счетчик, но его редактировать этот код
Пожалуйста, проверьте этот код
частный недействительными Autonumber1()
{
Строка connstring = ConfigurationManager.ConnectionStrings["Данные"].Параметр connectionString;
OleDbConnection con = new OleDbConnection(connstring);
string Query = "select count(*) from customer";
OleDbCommand cd = new OleDbCommand(Query, con);
пробовать
{
против.Открыть();
int count = конвертировать.ToInt16(cd.ExecuteScalar()) + 1;
textBoxLoanNumber.Текст = количество.ToString("00000");
textBoxLoanNumber.Включено = ложь;
}
наконец
{
против.Закрывать();
}
}
Dave Kreskowiak
- Нет!!! НЕ ДЕЛАЙ ЭТОГО!!!
Опять же, в многопользовательской системе, если два клиента выполняют этот код одновременно, они оба получат один и тот же идентификационный номер. Вы никогда не "проверяете" идентификационный номер, прежде чем зафиксировать данные для этой записи в базе данных.
Всегда используйте функцию автоматической нумерации базы данных, чтобы получить идентификационные номера записей. База данных гарантирует, что никакие две записи не получат один и тот же идентификационный номер, даже если два клиента отправят новые данные для новых записей в одно и то же время.
Вам, конечно, придется зафиксировать минимальный объем данных в новой записи, чтобы получить этот идентификационный номер. Какие это данные, зависит от ваших бизнес-правил.
Dave Kreskowiak
Опять же, вы никогда не сможете генерировать идентификаторы записей или "идентификационные номера" на стороне клиента. Вы получите столкновения в многопользовательской среде.
Даже вы говорите: "Ну, это будет работать в однопользовательской среде", да, это будет. Вплоть до тех пор, пока ваш клиент не добавит в систему второго человека и вы не обнаружите, что ваш код не может быть обновлен для обработки более чем одного пользователя одновременно.
PIEBALDconsult
Ну, любая нумерация строк-это анти-паттерн.
Рейтинг:
2
Randy Edge
Если вы хотите смоделировать номера строк в SQL Server, вы можете сгенерировать номер строки в запросе.
таким образом, вы все еще можете иметь столбец идентификаторов и по-прежнему возвращать пронумерованные записи.
Что бы вы ни делали, не пытайтесь использовать номер строки для связывания запросов.
https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-ver15
образец:
USE AdventureWorks2012;
GO
SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row,
FirstName, LastName, ROUND(SalesYTD,2,1) AS "Sales YTD"
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0;
Он вернется :
Row FirstName LastName SalesYTD
--- ----------- ---------------------- -----------------
1 Linda Mitchell 4251368.54
2 Jae Pak 4116871.22
3 Michael Blythe 3763178.17
4 Jillian Carson 3189418.36
5 Ranjit Varkey Chudukatil 3121616.32
6 José Saraiva 2604540.71
7 Shu Ito 2458535.61
8 Tsvi Reiter 2315185.61
9 Rachel Valdez 1827066.71
10 Tete Mensa-Annan 1576562.19
11 David Campbell 1573012.93
12 Garrett Vargas 1453719.46
13 Lynn Tsoflias 1421810.92
14 Pamela Ansman-Wolfe 1352577.13