Madhu Chatterjee Ответов: 2

Как решить ошибку "необходимо объявить скалярную переменную @id" при вставке данных в базу данных SQL


Сэр,
Когда я попытался вставить данные из datagridview в мою таблицу базы данных sql с именем "GenPaySlip", она выдала ошибку:- необходимо объявить скалярную переменную @GID.
Может ли кто-нибудь подсказать мне, как решить эту ошибку....

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

Ниже приведен мой код для вставки данных...
Dim oldb_cmd As OleDbCommand
        Dim gp_id, fid, wkhr As Integer
        Dim phpy, tdpy As Decimal
        Dim dtpt As String
        con.Open()
        oldb_cmd = New OleDbCommand("INSERT INTO GenPaySlip(GPS_Id, Fac_Id, WrkHrs, DtPsnt,PrHrPay, TotDayPay) VALUES (@GID, @FID, @WHR, @DPT, @PHP, @TDP)", con)



        Try
            
            For i As Integer = 0 To DgvGPaySlip.Rows.Count - 1
                gp_id = gps_id
                fid = DgvGPaySlip.Rows(i).Cells(0).Value
                wkhr = DgvGPaySlip.Rows(i).Cells(2).Value
                dtpt = DgvGPaySlip.Rows(i).Cells(3).Value
                phpy = DgvGPaySlip.Rows(i).Cells(4).Value
                tdpy = DgvGPaySlip.Rows(i).Cells(5).Value

                oldb_cmd.Parameters.AddWithValue("@GID", gp_id)
                oldb_cmd.Parameters.AddWithValue("@FID", fid)
                oldb_cmd.Parameters.AddWithValue("@WHR", wkhr)
                oldb_cmd.Parameters.AddWithValue("@DPT", dtpt)
                oldb_cmd.Parameters.AddWithValue("@PHP", phpy)
                oldb_cmd.Parameters.AddWithValue("@TDP", tdpy)
                oldb_cmd.ExecuteNonQuery()
                oldb_cmd.Parameters.Clear()
            Next
            
        Catch ex As Exception
            
            Beep()
                MsgBox(ex.Message, MsgBoxStyle.Information, "Information")
            
        End Try


       

        con.Close()

        MessageBox.Show("All Data Inserted")


Описание Таблицы Sql:-

GPS_Id	int	Unchecked
Fac_Id	int	Checked
WrkHrs	int	Checked
DtPsnt	varchar(15)	Checked
PrHrPay	decimal(18, 2)	Checked
TotDayPay	decimal(18, 2)	Checked
		Unchecked

2 Ответов

Рейтинг:
2

Wendelius

Еще одно наблюдение. Чтобы эффективно работать с параметрами, вы можете определить их вне цикла и просто заменить значения внутри цикла.

Рассмотрим следующий пример

oldb_cmd.Parameters.Add(New OleDbParameter("@GID", SqlDbType.Int))
oldb_cmd.Parameters.Add(New OleDbParameter("@FID", SqlDbType.Int))
oldb_cmd.Parameters.Add(New OleDbParameter("@WHR", SqlDbType.Int))
oldb_cmd.Parameters.Add(New OleDbParameter("@DPR", SqlDbType.Varchar, 15))
oldb_cmd.Parameters.Add(New OleDbParameter("@PHP", SqlDbType.Decimal))
oldb_cmd.Parameters.Add(New OleDbParameter("@TDP", SqlDbType.Decimal))
oldb_cmd.Prepare();

For i As Integer = 0 To DgvGPaySlip.Rows.Count - 1
    command.Parameters["@GID"].Value = gps_id
    command.Parameters["@FID"].Value = DgvGPaySlip.Rows(i).Cells(0).Value
    command.Parameters["@WHR"].Value = DgvGPaySlip.Rows(i).Cells(2).Value
    command.Parameters["@DPR"].Value = DgvGPaySlip.Rows(i).Cells(3).Value
    command.Parameters["@PHP"].Value = DgvGPaySlip.Rows(i).Cells(4).Value
    command.Parameters["@TDP"].Value = DgvGPaySlip.Rows(i).Cells(5).Value

    oldb_cmd.ExecuteNonQuery()
Next


Рейтинг:
0

OriginalGriff

Скорее всего, это потому, что gp_id является null и это , вероятно, потому, что gps_id является null
Почему это так null- Мы не можем сказать, так как у нас нет ваших данных или вашего кода, работающего перед нами.

Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Madhu Chatterjee

GPS_Id имеет значение null, поскольку является первичным ключом...

OriginalGriff

Первичные ключи не могут быть нулевыми.
Если вы имеете в виду, что он назначен БД, вы не можете установить его, поэтому даже не пытайтесь передать его через него.