お世話になっております。
表題の通りなのですが、
npgsqlを使用して、
insert into table(name,post,adrs,tel) values (@name,@post,@adrs,@tel) returning id;
を実行しました。
最初はExecuteReaderで戻り値を取得しようとしていたのですが、
transactionをcommitした際に、"A command is already in progress"とエラーとなってしまいました。
ExecuteReaderをExecuteScalarに変更することで一応解決したのですが、
何故これで解決したのかが理解できません。
どなたか参考URL等ありましたらお教えください。
よろしくお願いします。
変更前後のソースです。
Public Function InsertGetSequence(sql As String, params As List(Of DBParam)) As Long
Dim common As New CommonUtil
Dim id As Long = 0
Try
Using con As New NpgsqlConnection(conStr.ToString)
con.Open()
Using tran As NpgsqlTransaction = con.BeginTransaction
Try
Using com As New NpgsqlCommand(sql, con)
For Each param As DBParam In params
com.Parameters.Add(SetParameter(param))
Next
id = common.GetLong(com.ExecuteScalar)
'変更前
'Dim reader As NpgsqlDataReader = com.ExecuteReader()
'While reader.Read
'id = common.getLong(reader(0))
'End While
tran.Commit()
End Using
Catch ex As Exception
tran.Rollback()
Throw
End Try
End Using
Return id
End Using
Catch ex As Exception
Throw
End Try
End Function