【问题标题】:ASP.NET/VB/SQL: trying to insert data, getting error "no value given for required parameters"ASP.NET/VB/SQL:尝试插入数据,出现错误“没有为所需参数提供值”
【发布时间】:2011-01-14 19:34:14
【问题描述】:

我很确定这是一个基本的语法错误,我是新手,基本上是通过反复试验来解决问题...我正在尝试将文本框中的数据插入 Access 数据库,其中主键字段位于tableCourse 是前缀和 course_number。它不断给我“没有为一个或多个必需参数提供值”错误。这是我的代码隐藏:

Protected Sub Wizard1_FinishButtonClick(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs) Handles Wizard1.FinishButtonClick
    'Collect Data
    Dim myDept = txtDept.Text
    Dim myFirst = txtFirstName.Text
    Dim myLast = txtLastName.Text
    Dim myPrefix = txtCoursePrefix.Text
    Dim myNum = txtCourseNum.Text

    'Define Connection
    Dim myConn As New OleDbConnection
    myConn.ConnectionString = AccessDataSource1.ConnectionString

    'Create commands
    Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (@myDept, @myFirst, @myLast, @myPrefix, @myNum)", myConn)

    'Execute the commands
    myConn.Open()
    myIns1.ExecuteNonQuery()
End Sub

编辑:我的 AccessDataSource 中有参数,有没有办法使用这些参数?对不起,如果这是一个愚蠢的问题,我还在学习这些东西,它真的让我很困惑......

编辑:不太确定要使用哪个答案,哈哈……我试过这个:

Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, ?, ?, ?, ?)", myConn)

    myIns1.Parameters.AddWithValue("@myDept", myDept)
    myIns1.Parameters.AddWithValue("@myFirst", myFirst)
    myIns1.Parameters.AddWithValue("@myLast", myLast)
    myIns1.Parameters.AddWithValue("@myPrefix", myPrefix)
    myIns1.Parameters.AddWithValue("@myNum", myNum)

它插入数据,我检查了数据库,它都在那里,但它仍然给我一个错误:

“您请求对表的更改不成功,因为它们会在索引、主键或关系中创建重复值。更改包含重复数据的字段或字段中的数据、删除索引或重新定义索引以允许重复条目,然后重试。”

【问题讨论】:

    标签: asp.net sql vb.net ado.net


    【解决方案1】:

    你需要做这样的事情:

    Protected Sub Wizard1_FinishButtonClick(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs) Handles Wizard1.FinishButtonClick
        'Collect Data
        Dim myDept = txtDept.Text
        Dim myFirst = txtFirstName.Text
        Dim myLast = txtLastName.Text
        Dim myPrefix = txtCoursePrefix.Text
        Dim myNum = txtCourseNum.Text
    
        'Define Connection
        Dim myConn As New OleDbConnection
        myConn.ConnectionString = AccessDataSource1.ConnectionString
    
        'Create commands
        Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (@myDept, @myFirst, @myLast, @myPrefix, @myNum)", myConn)
    
         myIns1.Parameters.AddWithValue("@myDept", myDept)
         myIns1.Parameters.AddWithValue("@myFirst", myFirst)
         myIns1.Parameters.AddWithValue("@myLast", myLast)
         myIns1.Parameters.AddWithValue("@myPrefix", myPrefix)
         myIns1.Parameters.AddWithValue("@myNum", myNum)
        'Execute the commands
        myConn.Open()
        myIns1.ExecuteNonQuery()
    End Sub
    

    【讨论】:

      【解决方案2】:

      你需要给OleDbCommand添加参数。
      您还需要使用Using 块来处理命令和连接。

      【讨论】:

      • “使用使用块处理命令和连接”是什么意思?抱歉,就像我说的那样,我是新手。
      【解决方案3】:

      看起来您只需要为您的命令语句提供一些值。比如:

      Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (@myDept, @myFirst, @myLast, @myPrefix, @myNum)", myConn)
      myIns1.Parameters.Add("@myDept", OleDbType.VarChar, 50).Value = myDept;
      myIns1.Parameters.Add("@myFirst", OleDbType.VarChar, 50).Value = myFirst;
      ' ... and so on and so forth for each parameter you have.
      

      【讨论】:

        【解决方案4】:

        您正在创建一个包含大量参数的 SQL 命令——我认为这是正确的做法! - 但你永远不会创建这些参数并传递值!

        创建OleDbCommand 后,您现在需要将OleDbParameter 分别为@myDept@myFirst 等添加到OleDbCommand 对象(其OleDbCOmmand.Parameters 集合),并填充在文本框中的值中。

        另外:OleDbCommand 不支持那些命名参数(与 SqlCommand 不同,它支持) - 您需要用简单的问号替换它们:

        Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, ?, ?, ?, ?)", myConn)
        
        myIns1.Parameters.Add("@myDept", OleDbType.VarChar, 50).Value = txtDept.Text.Trim();
        ....
        myIns1.Parameters.Add("@myNum", OleDbType.Int).Value = 42;
        

        使用此设置,您必须以正确的顺序创建和添加您的 OleDbParameter 实例!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-23
          • 1970-01-01
          • 2021-07-28
          • 1970-01-01
          • 2014-08-10
          • 2018-09-28
          • 2014-11-11
          • 2016-08-18
          相关资源
          最近更新 更多