【问题标题】:Mariadb Vb .net Stored procedure error inserting Column cannot be nullMariadb Vb .net 存储过程错误插入列不能为空
【发布时间】:2020-03-07 17:38:00
【问题描述】:

我正在玩 RFID 并学习我购买了 RC522 的技术。将其连接到树莓派并开始构建应用程序。

尝试将标签注册到 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

我从 try catch 返回的错误是:“列 'Fname' 不能为空”

感谢您的帮助,

法比奥

【问题讨论】:

  • 您可以在表中允许null 值,也可以使用默认值。你想做什么?
  • 它们不能为空,因为我正在解析它们。但是有一个 ID 自动增量,我相信这是导致错误的原因。我为所有列发送值,因此结果不应该是空值。
  • 用类似MySql workbench/heidisqlmor调用sproc来证明是vb还是sproc
  • 通过添加ex.ToString() 来增强您的异常处理,也许您会得到有关错误的更多详细信息。
  • 在 MySql.Data.MySqlClient.MySqlStream.ReadPacket() 在 MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) 在 MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId , Int32& affectedRows, Int64& insertedId) 在 MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) 在 MySql.Data.MySqlClient.MySqlDataReader.NextResult() 在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior 行为)在 MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()

标签: vb.net stored-procedures mariadb sql-insert


【解决方案1】:

删除你在参数上使用@符号 - 我不完全确定这是问题,但我从未见过它用于 Maria。

在文档中,Maria sproc 参数的名称前没有 @。

也将其从 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)
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 2014-01-30
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多