Member 14061303 Ответов: 3

Как добавить пользовательский номер счета-фактуры типа "INNK-5001" с автоматическим приращением с помощью базы данных sqlite в приложении C# windows


Я использую базу данных SQLITE. Я хочу создать пользовательский номер счета-фактуры, такой как этот "INNK-5001" с автоматическим увеличением INNK-5002, INNK-5003... и так далее. Я пишу ниже код для этой цели. Ниже код работает корректно только в том случае, если я использую только номер типа "5000", но когда я использую "INNK-5000", я получил ошибку. Пожалуйста, помогите мне, как я могу получить этот номер "INNK-5000" с автоматическим приращением с помощью базы данных Sqlite. Это мой код...

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

// Для Создания Базы Данных Sqlite

public void CreateDB()
    {
        if (!File.Exists("customid.db"))
        {
            SQLiteConnection.CreateFile("customid.db");
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=customid.db;Version=3;"))
            {
                string commandstring = "CREATE TABLE cusid (Id INTEGER PRIMARY KEY NOT NULL, FirstName NVARCHAR(250), LastName NVARCHAR(250))";
                using (SQLiteCommand cmd = new SQLiteCommand(commandstring, conn))
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }


// Для Пользовательского Номера Счета-Фактуры

public void CustomId2()
    {
        try
        {
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=customid.db;Version=3;"))
            {
                string CommandText = "SELECT Id FROM cusid";
                using (SQLiteDataAdapter sda = new SQLiteDataAdapter(CommandText, conn))
                {
                    conn.Open();
                    DataTable datat = new DataTable();
                    sda.Fill(datat);

                    if (datat.Rows.Count < 1)
                    {
                        textBox1.Text = "INNK-5000";
                    }
                    else
                    {
                        using (SQLiteConnection conn1 = new SQLiteConnection("Data Source=customid.db;Version=3;"))
                        {
                            string CommandString = "SELECT MAX(Id) FROM cusid";
                            using (SQLiteCommand cmd = new SQLiteCommand(CommandString, conn))
                            {
                                conn1.Open();
                                int a = Convert.ToInt32(cmd.ExecuteScalar());
                                a = a + 1;
                                textBox1.Text = a.ToString();
                            }
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }


// Для сохранения записи в базу данных

private void savebtn_Click(object sender, EventArgs e)
    {
        try
        {
            using (SQLiteConnection conn = new SQLiteConnection("Data Source=customid.db;Version=3;"))
            {
                string CommandText = "INSERT INTO cusid ([Id], [FirstName], [LastName]) VALUES (@id,@firstname,@lastname)";
                using (SQLiteCommand cmd = new SQLiteCommand(CommandText, conn))
                {
                    cmd.Parameters.AddWithValue("@id", textBox1.Text);
                    cmd.Parameters.AddWithValue("@firstname", textBox2.Text);
                    cmd.Parameters.AddWithValue("@lastname", textBox3.Text);

                    conn.Open();
                    int a = cmd.ExecuteNonQuery();
                    if (a > 0)
                    {
                        MessageBox.Show("Data Saved!!");
                        CustomId2();
                        BindDataGridView();
                    }
                    else
                    {
                        MessageBox.Show("Not Saved!!");
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }



Пожалуйста, помогите мне... Спасибо.

3 Ответов

Рейтинг:
2

Sk Imad

Попробуй вот это.
-ИННК ... не будет сохранен в базе данных. В базе данных будет сохранено только целочисленное значение.

DECLARE @NewInvoiceNumber varchar(30);

SELECT @NewInvoiceNumber = RIGHT(1000 + InvoiceNumber + 1, 3)
    FROM
    (
    SELECT CONVERT(INT,InvoiceNumber) AS InvoiceNumber FROM tableName
    ) Temp

UPDATE tableName SET InvoiceNumber = @NewInvoiceNumber
SELECT Invoice = 'INNK-'+@NewInvoiceNumber


Рейтинг:
1

MadMyche

Исходя из вашего желания иметь этот текст в своей БД, я бы рекомендовал использовать столбец идентификаторов на основе целых чисел, как предложил Джерри (я назову его InvoiceID),
и есть вторая колонка (я назову ее InvoiceNumberText).
Затем, чтобы ваш код сделал это; создайте Спусковой крючок например, чтобы заселить его

CREATE TRIGGER CalculateInvoiceNumberText
AFTER INSERT ON Invoices
BEGIN
  UPDATE Invoices
  SET InvoiceNumberText = 'INNK-' + Cast(new.InvoiceID as Text)
  WHERE InvoiceID = new.InvoiceID
END;


Рейтинг:
0

Gerry Schmitz

"ИННК" - это просто "украшение".

В вашей ситуации проще всего просто поставить "ярлык" (содержащий "INNK-") на вашу форму ... перед полем "id"; например, INNK-[...].

Тогда вам не нужно беспокоиться о "синтаксическом анализе"; просто преобразуйте "id" между int / string.

Вам также не нужно будет беспокоиться о "приращении", если вы используете столбец идентификаторов (для идентификатора).


Member 14061303

Хорошее предложение. но я хочу сделать это с помощью кода.