2016-04-27 4 views
0

Мой вопрос в том, как получить максимальное значение первичного ключа в таблице, увеличить его на +1, а затем поместить этот результат в определенное текстовое поле. Текст, который будет вставлен позже к базе данных в качестве новой записи. СпасибоC# Как получить максимальное значение первичного ключа

+4

Не было бы легче иметь первичный ключ быть столбец идентификаторов, и пусть база данных позаботиться о его обновления? – Tim

+1

Существуют опасности для этого. Например, 2 человека одновременно получают доступ к одной странице и получают одинаковый максимальный id. Теперь одно сообщение перед другим и max id теперь изменилось. Второй человек приведет к конфликту первичного ключа при попытке обновления. Я бы предложил следующее Tims комментарий –

+0

И многое, гораздо безопаснее. Это не будет хорошо масштабироваться, когда вы позволяете пользователю редактировать несколько записей или несколько пользователей для каждого редактирования одновременно. Вы получите дубликаты ключей. –

ответ

1

Это может привести к медленной работе программы, если база данных содержит тонны записей, но она работает хорошо для меня.

DataTable myDataTable = new DataTable(); 
/* 
Add record from primary key column to datatable 
*/ 

//Add primary key from datatable to List<int> 
List<int> primaryKeyList = new List<int>(); 
foreach (DataRow row in myDataTable.Rows) 
{ 
    primaryKeyList.Add(Int32.Parse(row[0].ToString())); 
} 

int maxKey = primaryKeyList.Max(); 
primaryKeyList.Clear(); 
myDataTable.Dispose(); 
/* 
Do whatever you want with maxKey 
*/ 

или

DataTable myDataTable = new DataTable(); 
/* 
Add record from primary key column to datatable 
*/ 

int maxKey = 0; 
//Find max key 
foreach (DataRow row in myDataTable.Rows) 
{ 
    if(Int32.Parse(row[0].ToString()) > maxKey) maxKey = Int32.Parse(row[0].ToString()); 
} 

myDataTable.Dispose(); 
/* 
Do whatever you want with maxKey 
*/ 
+0

Хотя это и отвечает на вопрос, для приложения действительно не очень хорошая идея генерировать первичный ключ по причинам, указанным в комментариях выше. – Tim

Смежные вопросы