【问题标题】:Parameter "@Fname" Has no default value参数“@Fname”没有默认值
【发布时间】:2021-09-08 19:05:17
【问题描述】:
Sub Save()
        Try
            con = New OleDbConnection(cs)
            con.Open()
            Dim cb As String = "insert into [Data] ([Fname],[Lname],[User],[Pass],[Birthday],[Role],[Pic]) VALUES (@Fname,@Lname,@Username,@Password,@Birthday,@Role,@Pic)"
            Dim i As New Integer
            cmd = New OleDbCommand(cb)
            cmd.Connection = con
            cmd.Parameters.Clear()
            cmd.Parameters.Add(New OleDbParameter("@Fname", System.Data.OleDb.OleDbType.VarChar, 250, "Fname"))
            cmd.Parameters.Add(New OleDbParameter("@Lname", System.Data.OleDb.OleDbType.VarChar, 250, "Lname"))
            cmd.Parameters.Add(New OleDbParameter("@User", System.Data.OleDb.OleDbType.VarChar, 250, "Username"))
            cmd.Parameters.Add(New OleDbParameter("@Pass", System.Data.OleDb.OleDbType.VarChar, 250, "Password"))
            cmd.Parameters.Add(New OleDbParameter("@Birthday", System.Data.OleDb.OleDbType.Date, 250, "Birthday"))
            cmd.Parameters.Add(New OleDbParameter("@Role", System.Data.OleDb.OleDbType.VarChar, 250, "Role"))
            cmd.Parameters.AddWithValue("@Fname", txt_Fname.Text)
            cmd.Parameters.AddWithValue("@Lname", txt_Lname.Text)
            cmd.Parameters.AddWithValue("@Username", txt_User.Text)
            cmd.Parameters.AddWithValue("@Password", txt_Pass.Text)
            cmd.Parameters.AddWithValue("@Birthday", CDate(Birthday.Value))
            cmd.Parameters.AddWithValue("@Role", cb_role.Text)


            Dim FileSize As New UInt32
            Dim mstream As New System.IO.MemoryStream
            Register_picture.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
            Dim picture() As Byte = mstream.GetBuffer
            FileSize = mstream.Length
            mstream.Close()

            cmd.Parameters.AddWithValue("@Pic", picture)

            i = cmd.ExecuteNonQuery
            If i > 0 Then
                MsgBox("New User Register Succesfully!", vbInformation)
            Else
                MsgBox("New User Register Fail!", vbCritical)
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

【问题讨论】:

  • 您的问题是因为您将所有参数添加了两次;删除所有AddWithValue 调用,然后将OleDbParameter read more here 上的Value 属性设置为您需要的值。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: vb.net ms-access


【解决方案1】:

除了两次添加参数之外,您第一次添加它们的方式也是错误的。第四个参数是调用UpdateDataTable 中的源列的名称,你没有这样做。摆脱这个:

cmd.Parameters.Add(New OleDbParameter("@Fname", System.Data.OleDb.OleDbType.VarChar, 250, "Fname"))

还有这个:

cmd.Parameters.AddWithValue("@Fname", txt_Fname.Text)

并将它们替换为:

cmd.Parameters.Add("@Fname", OleDbType.VarChar, 250).Value = txt_Fname.Text

您只需为具有大小的数据类型指定大小,例如varcharvarbinarydate你不需要一个:

cmd.Parameters.Add("@Birthday", OleDbType.Date).Value = CDate(Birthday.Value)

在这种情况下Birthday 是什么?它有一个Value 属性表明它是一个DateTimePicker,在这种情况下Value 属性已经是Date 类型,所以使用CDate 是没有意义的。不过,您可能应该做的是时间为零:

cmd.Parameters.Add("@Birthday", OleDbType.Date).Value = Birthday.Value.Date

我还建议更改名称Birthday。该名称表明它是一个实际包含生日的Date 变量。我还建议“出生日期”比“生日”更合适。前者通常表示您出生的实际日期,而后者通常表示随后任何一年的那一天的周年纪念日。因此,我将该控件命名为dateOfBirthPicker。现在这个名字是准确和描述性的,不像Birthday。这假设我的实际情况是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多