【问题标题】:Getting Primary key values (auto number ) VB获取主键值(自动编号)VB
【发布时间】:2014-06-29 07:01:16
【问题描述】:

我在Access 上有一个数据库,我想插入到 2 个表中

  • ReportReq
  • req_sysino

我想获取主键的最后一个值(自动编号)并将其插入到 req_sysino ,我被这段代码卡住了,我不知道如何处理

Private Function InsertSysInvToDB(intSysInv As Integer) As Integer

    Dim strSQLStatement As String = String.Empty
    Dim intNoAffectedRows As Integer = 0
    Dim con As New OleDb.OleDbConnection("PROVIDER = Microsoft.ace.OLEDB.12.0; Data Source = C:\Users\felmbanF\Documents\Visual Studio 2012\Projects\WebApplication3\WebApplication3\App_Data\ReportReq.accdb")
    Dim cmd As OleDb.OleDbCommand
    Dim reqnum As String = "Select  @@REQ_NUM from ReportReq"
    strSQLStatement = "INSERT INTO req_sysino (Req_num, sysinvo_ID)" +
        " VALUES (" & reqnum & "','" & intSysInv & ")"

    cmd = New OleDb.OleDbCommand(strSQLStatement, con)

    cmd.Connection.Open()

    intNoAffectedRows = cmd.ExecuteNonQuery()
    cmd.Connection.Close()

    Return intNoAffectedRows
End Function

这是我应该生成自动编号的插入代码

   Dim dbProvider = "PROVIDER = Microsoft.ace.OLEDB.12.0;"
    Dim dbSource = " Data Source = C:\Users\felmbanF\Documents\Visual Studio 2012\Projects\WebApplication3\WebApplication3\App_Data\ReportReq.accdb"

    Dim sql = "INSERT INTO ReportReq (Emp_EmpID, Req_Date,Req_expecDate,Req_repnum, Req_name, Req_Descrip, Req_columns, Req_Filtes, Req_Prompts)" +
        "VALUES (@reqNUM,@reqName,@reqDescrip,@reqcolumns,@reqfilters,@reqprompts)"

    Using con = New OleDb.OleDbConnection(dbProvider & dbSource)
        Using cmd = New OleDb.OleDbCommand(sql, con)
            con.Open()
            cmd.Parameters.AddWithValue("@EmpID", txtEmpID.Text)
            cmd.Parameters.AddWithValue("@reqDate", DateTime.Today)
            cmd.Parameters.AddWithValue("@reqExpecDate", DateTime.Parse(txtbxExpecDate.Text).ToShortDateString())
            cmd.Parameters.AddWithValue("@reqNUM", txtRep_NUM.Text)
            cmd.Parameters.AddWithValue("@reqName", txtRep_Name.Text)
            cmd.Parameters.AddWithValue("@reqDescrip", txtbxRep_Desc.Text)
            cmd.Parameters.AddWithValue("@reqcolumns", txtbxColReq.Text)
            cmd.Parameters.AddWithValue("@reqfilters", txtbxFilReq.Text)
            cmd.Parameters.AddWithValue("@reqprompts", txtbxPromReq.Text)
            cmd.ExecuteNonQuery()
        End Using
    End Using

【问题讨论】:

标签: vb.net ms-access


【解决方案1】:

在您ExecuteNonQuery() 您的INSERT INTO ReportReq ... 语句之后,您需要立即运行一个

SELECT @@IDENTITY

查询并检索其结果,像这样

cmd.ExecuteNonQuery()  ' your existing statement to run INSERT INTO ReportReq
cmd.CommandText = "SELECT @@IDENTITY"
Dim newAutoNumberValue As Integer = cmd.ExecuteScalar()

【讨论】:

  • 它确实有效,但我如何在我的功能中使用它。如果您注意到第一个代码是与插入语句不同的函数
  • @Flimboo 如果两个函数都在同一个模块中,那么你可以在模块级别 Dim newAutoNumberValue 然后它对两个函数都可用。
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多