SajinAboo Ответов: 3

Как сгенерировать непрерывный порядковый номер с префиксом в asp.net


Привет,

Я хочу сгенерировать 6-значный порядковый номер с префиксом PB...
Я нашел решение в проекте кода, но оно показывает ошибку...


public string serialId()
        {
            string Id = GenerateId("customer_details", "id", 6, "PB", true);
            return Id;
        }

        public string GenerateId(string TableName, string ColumnName, int ColumnLength, string Prefix, bool Padding)
        {
            string query, con, Id;
            con = "Data Source=.;Initial Catalog=login_;Integrated Security=True";
            SqlConnection cn = new SqlConnection(con);
            int preLength, padLength;
            preLength = Convert.ToInt32(Prefix.Length);
            padLength = ColumnLength - preLength;
            if (Padding == true)
            {
                query = "SELECT'" + Prefix + "'+REPLACE(STR(MAX(CAST(SUBSTRING(" + ColumnName + "," + Convert.ToString(preLength + 1) + "," + padLength + ")AS INTEGER))+1 ," + padLength + "),'',0)FROM " + TableName;
            }
            else
            {
                query = "SELECT'" + Prefix + "'+CAST(MAX(CAST(SUBSTRING(" + ColumnName + "," + Convert.ToString(preLength + 1) + "," + padLength + ")AS INTEGER))+1 AS VARCHAR) FROM " + TableName;
            }
            SqlCommand com = new SqlCommand(query, cn);
            cn.Open();
            if (com.ExecuteScalar().ToString() == "")
            {
                Id = Prefix;
                if (Padding == true)
                {
                    for (int i = 1; i <= padLength - 1; i++)
                    {
                        Id += "0";
                    }
                }
                Id += "1";
            }
            else
            {
                Id = Convert.ToString(com.ExecuteScalar());
            }
            cn.Close();
            return Id;
        }


В приведенном выше коде во время отладки он выдает исключение в приведенной выше жирной строке...
Исключение составляет "недопустимый идентификатор имени столбца"...

может ли кто-нибудь помочь мне в устранении этой проблемы?

С уважением,
Саджин А

Что я уже пробовал:

Я много раз пытался отлаживать и изменять код

3 Ответов

Рейтинг:
1

Patrice T

Я думаю, что вы найдете этот вопрос интересным Как создать пользовательский первичный ключ?[^] и ответ от Мацея Лоса, который в основном является ссылкой.
Пользовательские автоматически генерируемые последовательности с помощью SQL Server - SQLTeam.com[^]


Рейтинг:
1

vstonape

string id = string.Format("PT{0}", sequenceNumber.ToString().PadLeft(13, '0'));


Рейтинг:
0

OriginalGriff

Вместо того чтобы возиться с этим, дайте вашей таблице значение идентификатора (которое обеспечит числовую часть вашего кода), а затем добавьте вычисляемый столбец: https://technet.microsoft.com/en-GB/library/ms191250%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396[^]
Это будет поддерживать код для вас, как если бы это был один столбец, без необходимости рисковать SQL-инъекцией, как вы делаете с кодом, который вы показываете.
Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.