Я создал функцию, которая создаст новый идентификатор записи в базе данных.Не удается получить нужную запись из таблицы
Он делает это, просто получая идентификатор для предыдущей записи, а затем перемещая ее на одну букву вперед. Например, если предыдущий идентификатор равен AAA, новый идентификатор будет AAB и т. Д.
Как я могу получить предыдущий идентификатор, подсчитывая количество строк в таблице, а затем используя это число, чтобы получить последнюю запись в таблице. Причина, по которой я убираю 1, заключается в том, что счетчик строк не индексируется 0, а число записей. Таким образом, в таблице с 50 записями последняя запись будет записывать 49.
Проблема в том, что эта функция работает только для 1 записи. Таким образом, только первый генерируемый идентификатор будет двигаться вперед, остальное будет таким же, как и второе. Например, это будет выглядеть так.
0 - AAA, 1 - AAB, 2 - AAB, 3 - AAB ....
// Generate codes in order
public string StrGenerateSequentialCode(string StrTableName)
{
// Get the places for the counters from the previous code
AccessTable ObjStoreCode = new AccessTable();
ObjStoreCode.SelectTable(StrTableName);
string StrPreviousID = "";
StrPreviousID = ObjStoreCode.StrGetRow(ObjStoreCode.IntGetRowCount() - 1, 0);
Оставайтесь пожалуйста, что код кода для этой функции.
char[] ArrCollection = new char[36] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
int[] ArrPreviousIDSpace = new int[11]; // the number if chars for this code is fixed to 11
for (int i = 0; i < ArrPreviousIDSpace.Length; i++)
{
for (int j = 0; j < ArrCollection.Length; j++)
{
if (ArrCollection[j] != StrPreviousID[i])
{
ArrPreviousIDSpace[i]++;
}
else
{
break;
}
}
}
// Now generate a code with each character carrying on from the last
string StrCode = "";
/* Add one to the last parts position until it reaches 27,
* when it does set its position to 0 and then add one to the second last parts
position and repeat the process for the third last part...*/
int A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, G = 0, H = 0, I = 0, J = 0, K = 0;
// Make the starting points for the char selecters the
A = ArrPreviousIDSpace[0];
B = ArrPreviousIDSpace[1];
C = ArrPreviousIDSpace[2];
D = ArrPreviousIDSpace[3];
E = ArrPreviousIDSpace[4];
F = ArrPreviousIDSpace[5];
G = ArrPreviousIDSpace[6];
H = ArrPreviousIDSpace[7];
I = ArrPreviousIDSpace[8];
J = ArrPreviousIDSpace[9];
K = ArrPreviousIDSpace[10];
// Turn the clock
K++;
if (K == ArrCollection.Length)
{
K = 0;
J++;
}
if (J == ArrCollection.Length)
{
J = 0;
I++;
}
if (I == ArrCollection.Length)
{
I = 0;
H++;
}
if (H == ArrCollection.Length)
{
H = 0;
G++;
}
if (G == ArrCollection.Length)
{
G = 0;
F++;
}
if (F == ArrCollection.Length)
{
F = 0;
E++;
}
if (E == ArrCollection.Length)
{
E = 0;
D++;
}
if (D == ArrCollection.Length)
{
D = 0;
C++;
}
if (C == ArrCollection.Length)
{
C = 0;
B++;
}
if (B == ArrCollection.Length)
{
B = 0;
A++;
}
// Combine the chars to make a final password
StrCode = ArrCollection[A].ToString() + ArrCollection[B].ToString() + ArrCollection[C].ToString() + ArrCollection[D].ToString() + ArrCollection[E].ToString() + ArrCollection[F].ToString() + ArrCollection[G].ToString() + ArrCollection[H].ToString() + ArrCollection[I].ToString() + ArrCollection[J].ToString() + ArrCollection[K].ToString();
return StrCode;
Вот функция, которая получает запись из таблицы.
public string StrGetRow(int IntSelectedRow = 0, int IntSelectedColumn = 0)
{
string StrRequesedRow = "";
// This if statement will check whether or not the selected coloumns or rows are larger than the amount available
if (IntSelectedRow < ObjDataSet.Tables[0].Rows.Count & IntSelectedColumn < ObjDataSet.Tables[0].Columns.Count)
{
// Make the table the data row origianates from the table on the dataset
DataRow = ObjDataSet.Tables[0].Rows[IntSelectedRow];
// This will store the data in the string 'StrRequestedRow
StrRequesedRow = DataRow.ItemArray.GetValue(IntSelectedColumn).ToString();
}
else
{
StrRequesedRow = "NO MORE RECORDS";
}
return StrRequesedRow;
}
Вы делаете это совершенно неправильно. Каждая современная СУБД имеет способ вставки записей, а затем возвращает идентификатор новой записи. Какие СУБД вы используете? –
Я использую Microsoft SQL в сочетании с OLEDB. Кроме того, я просто добавил функцию, которую я использую, чтобы получить запись из таблицы, чтобы дать вам лучшее описание. – Abdiyee
Все это швы немного глупо. Если вы действительно не хотите, чтобы автоматически сгенерированный идентификатор использовал [Guid.NewGuid()] (https://msdn.microsoft.com/en-us/library/system.guid.newguid (v = vs.110) .aspx) для создания новых идентификаторов или чего-то, что не зависит от базы данных. Ваш путь немного плох по нескольким причинам (параллелизм, производительность, блокировки ...). –