Mariadb Vb. net Ошибка вставки хранимой процедуры. Столбец не может быть нулевым - PullRequest
0 голосов
/ 07 марта 2020

Я играю с RFID и изучаю технологию, которую купил RC522. Подключил его к raspberry pi и начал создавать приложение.

При попытке зарегистрировать тег в базе данных mariadb происходит сбой. Я не могу понять, что не так.

Таблица:

CREATE TABLE RFID.Users (
  ID INT(10) NOT NULL AUTO_INCREMENT,
  Fname VARCHAR(100) NOT NULL,
  Lname VARCHAR(100) NOT NULL,
  TAG VARCHAR(100) NOT NULL,
  Image LONGBLOB NOT NULL,
  PRIMARY KEY (ID)
)
ENGINE = INNODB,
AUTO_INCREMENT = 4,
AVG_ROW_LENGTH = 16384,
CHARACTER SET latin1,
COLLATE latin1_swedish_ci;

Хранимая процедура:

CREATE DEFINER = 'root'@'%'
PROCEDURE RFID.Write_Tag(IN `@Fname` VARCHAR(100), IN `@Lname` VARCHAR(100), IN `@Tag` VARCHAR(100), IN `@Image` LONGBLOB)
BEGIN
INSERT INTO 
  Users 
  (Fname, Lname, TAG, Image)
  VALUES  
  (@Fname, @Lname, @Tag, @Image);
END

Vb. net код для вставки тегов:

Private Sub BtnWriteTag_Click(sender As Object, e As EventArgs) Handles btnWriteTag.Click

        Try
            If IsNothing(PictureBox1.Image) Then
                MsgBox("Please load image first")
            Else
                lblinfo.Text = "Please place your tag near the reader"
                sshcmd = sshClient.RunCommand("python /home/pi/fabio/workingwriter.py " & "'" & txtFname.Text & "'")
                txtTag.Text = sshcmd.Result.Replace(vbCr, "").Replace(vbLf, "")
                Dim filesize As UInt32
                Dim mstream As New System.IO.MemoryStream()
                PictureBox1.Image.Save(mstream, Imaging.ImageFormat.Jpeg)
                Dim arrImage() As Byte = mstream.GetBuffer()
                filesize = mstream.Length
                mstream.Close()
                MessageBox.Show(filesize)
                MessageBox.Show(txtFname.Text)
                con = GetConnect()
                con.Open()
                cmd = New MySqlCommand("Write_Tag", con) With {
                        .CommandType = CommandType.StoredProcedure
                    }
                cmd.Parameters.AddWithValue("@Fname", txtFname.Text)
                cmd.Parameters.AddWithValue("@Lname", txtLname.Text)
                cmd.Parameters.AddWithValue("@TAG", txtTag.Text)
                cmd.Parameters.AddWithValue("@image", arrImage)
                Dim x As Integer = cmd.ExecuteNonQuery()
                If x = 1 Then
                    MessageBox.Show(" User saved.")
                End If
            End If
        Catch ex As Exception
            MsgBox("Error found: " & vbCrLf & ex.Message, MsgBoxStyle.Critical, "RFID Tag Reader")
        Finally
            If cmd IsNot Nothing Then cmd.Dispose()
            If con IsNot Nothing AndAlso con.State <> ConnectionState.Closed Then con.Close()
        End Try
    End Sub

Ошибка Я возвращаюсь к уловке попытки: «Столбец« Fname »не может быть нулевым»

Благодарим Вас за помощь,

Фабио

1 Ответ

1 голос
/ 07 марта 2020

Откажитесь от использования символов @ в параметрах везде - я не совсем уверен, что это проблема, но я никогда не видел, чтобы они использовались для Марии.

Maria spro c params не имеют @ перед именем в документах.

Удалите его также из вызова AddWithValue:

CREATE DEFINER = 'root'@'%'
PROCEDURE RFID.Write_Tag(
  IN pFname VARCHAR(100),
  IN pLname VARCHAR(100),
  IN pTag VARCHAR(100), 
  IN pImage LONGBLOB)
BEGIN
INSERT INTO 
  Users 
  (Fname, Lname, TAG, Image)
  VALUES  
  (pFname, pLname, pTag, pImage);
END

cmd.Parameters.AddWithValue("pFname", txtFname.Text)
...
...