chetanp322 Ответов: 4

Автоматическое увеличение числа во время загрузки формы каждый раз


Дело все,
Пожалуйста, помогите мне с проверкой ошибки в коде.Я хочу получать увеличенное число в текстовом поле каждый раз при загрузке формы. Число остается по умолчанию 1, но не увеличивается.

код есть :
Private Sub mainpage_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim conn As SqlConnection
        Dim cmd As New SqlCommand
        Dim data_base As String = " Data Source=CHET-PC\sqlexpress;Initial Catalog=invoice;Integrated Security=True"
        conn = New SqlConnection(data_base)
        Dim dr As SqlDataReader
        cmd = New SqlCommand("Select MAX(IS NULL(no),0)+1) from billdetail1", conn)
        dr = cmd.ExecuteReader
        dr.Close()
        TextBox1.Text = dr("no").ToString()
    End Sub

4 Ответов

Рейтинг:
2

lewax00

Похоже, что ваш код увеличивает результат из инструкции select, но это не обновляет его в базе данных. Вам нужно явно обновить значение.


chetanp322

у меня есть другой код, который обновляет все мое поле в базе данных

Espen Harlinn

5 ЕД!

Рейтинг:
2

chetanp322

Dim sqlText As String = " SELECT MAX (no) FROM billdetail1 "

Dim con3 As New SqlConnection ("источник данных=CHET-PC\sqlexpress;начальный каталог=счет-фактура;Интегрированная безопасность=True")
Команда Dim как новая SqlCommand(sqlText, con3)

Попробуй
кон3.Открыть()
Dim pcount As String = Convert.ToString (команда.Executescalar так())
Если pcount.Тогда Длина = 0

TextBox1. Text = " 1"
Ещё
Dim pcount1 As Integer = Convert.ToInt32(pcount)
Dim pcountAdd As Integer = pcount1 + 1
TextBox1. Text = pcountAdd.Метод toString()

Конец, Если

Поймать ex как исключение
Ящик для сообщений.Показать (например, сообщение)
Окончательно
кон3.Закрывать()
Конец Попытки


Рейтинг:
0

Maciej Los

Ваш запрос:

Select MAX(IS NULL(no),0)+1) from billdetail1

дает результат:

[нет имени столбца]
ценность


Далее в коде вы пытаетесь прочитать результаты из столбца с именем: no
TextBox1.Text = dr("no").ToString()

Взгляните на результат (выше таблицы) и скажите мне, где находится поле с именем no?

Итак ... замените свой запрос на:
Select ISNULL(MAX([no]),0)+1 AS [no] FROM billdetail1


Подробнее об этом читайте здесь: ИДЕНТИЧНОСТЬ[^]

[EDIT name= " второй взгляд"]
Я вижу один потенциальный риск в том, как вы пытаетесь получить номер billdetail. Допустим, 2 пользователя одновременно открывают форму. Ваш запрос вернет для них billdetail [no] = 5. Что произойдет, когда они попытаются сохранить данные? Вы получите дубликаты.
Вот почему самое важное-установить identity (increment) - перейдите по ссылке выше, пример A - для столбца с именем [no]
Конечно, перед сохранением данных вы можете повторно запросить a [no], чтобы получить max+1, но это не гарантирует отсутствие дубликатов чисел.[/РЕДАКТИРОВАТЬ]


Maciej Los

Четанп322, пожалуйста, отметьте свой вопрос как "решенный".

chetanp322

после внесения изменений в код, как вы предлагаете...все равно он не увеличивается...плз помогите как я начинающий

Maciej Los

Если вы новичок, вам нужно прочитать об идентичности (ссылка выше).

Рейтинг:
0

Ganesan Senthilvel

Если вы говорите о поле автоматической нумерации в DataTable, то взгляните на это: http://msdn.microsoft.com/en-us/library/system.data.datacolumn.autoincrement.aspx[^]


chetanp322

пожалуйста, подскажите мне, какая ошибка есть в моем коде???