从mySQL表中检索ASP.NET中的自动递增列值,而不使用存储的进程

时间:2010-01-21 16:07:49

标签: asp.net mysql database

我是一个使用mySQL数据适配器并插入新行的函数。

我希望函数返回更新行的自动递增列的值。

请帮忙。

Public Function addRow(ByVal colA as String, ByVal colB as String) As Integer
    Dim dbConnection As New MySqlConnection("server=xxx; user id=xxx; password=xxx; database=xxx; pooling=false;")
    Dim dbDataAdapter As New MySqlDataAdapter("SELECT * FROM table", dbConnection)
    Dim dbDataSet As DataSet = New DataSet
    dbDataAdapter.Fill(dbDataSet, "table")

    Dim dbNewRow As DataRow = dbDataSet.Tables("table").NewRow
    dbNewRow("colA") = colA
    dbNewRow("colB") = colB

    dbDataSet.Tables("table").Rows.Add(dbNewRow)

    dbDataAdapter.InsertCommand = New MySqlCommand("INSERT into table(colA, colB) VALUES (@colA, @colB)", dbConnection)
    dbDataAdapter.InsertCommand.Parameters.Add("colA", MySqlDbType.VarChar, 256, "colA")
    dbDataAdapter.InsertCommand.Parameters.Add("colB", MySqlDbType.VarChar, 256, "colB")

    Dim dbParm As MySqlParameter = dbDataAdapter.InsertCommand.Parameters.Add("@colID", MySqlDbType.Int16, 16, "colID")
    dbParm.Direction = ParameterDirection.ReturnValue

    dbDataAdapter.Update(dbDataSet, "table")

    Return dbDataAdapter.InsertCommand.Parameters("@colID").Value

End Function

“返回...”行不起作用,不知道正确的代码是什么。

3 个答案:

答案 0 :(得分:1)

假设插入存储过程正在执行类似

的操作
RETURN @@IDENTITY

您将需要相当于:

oDatabase.AddParameter(oDbCommand, "@RETURN_VALUE", System.Data.DbType.Int32, System.Data.ParameterDirection.ReturnValue, "", System.Data.DataRowVersion.Current, null);
...
oDbCommand.ExecuteNonQuery();
returnStatusCode = (int)oDbCommand.Parameters[0].Value;

答案 1 :(得分:0)

试试这个:

Dim result As Integer = 0
Integer.TryParse(dbDataAdapter.InsertCommand.Parameters("@colID").Value, result)
Return result

答案 2 :(得分:0)

我自己也做了。

Public Function addRow(ByVal colA as String, ByVal colB as String) As Integer 
    Dim dbConnection As New MySqlConnection("server=xxx; user id=xxx; password=xxx; database=xxx; pooling=false;") 
    Dim dbDataAdapter As New MySqlDataAdapter("SELECT * FROM table where colID = 0", dbConnection) 
    Dim dbDataSet As DataSet = New DataSet 
    dbDataAdapter.Fill(dbDataSet, "table") 

    Dim dbNewRow As DataRow = dbDataSet.Tables("table").NewRow 
    dbNewRow("colA") = colA 
    dbNewRow("colB") = colB 

    dbDataSet.Tables("table").Rows.Add(dbNewRow) 

    dbDataAdapter.InsertCommand = New MySqlCommand("INSERT into table(colA, colB) VALUES (@colA, @colB); Select * from table where colID = LAST_INSERT_ID()", dbConnection) 
    dbDataAdapter.InsertCommand.Parameters.Add("colA", MySqlDbType.VarChar, 256, "colA") 
    dbDataAdapter.InsertCommand.Parameters.Add("colB", MySqlDbType.VarChar, 256, "colB") 

    dbDataAdapter.Update(dbDataSet, "table") 

    Return dbDataSet.Tables("table").Rows(0).Item(0)

End Function

似乎我需要做的就是在Insert语句的末尾添加一个Select语句,并使用LAST_INSERT_ID函数来获取最后一个Inserted行。然后只需读取那一行ID并返回它。

DataAdapters以这种方式工作,我感到非常失望。我相信经典ASP比这更容易!感谢所有回复的人。