command.CommandText属性包含UPDATE语句和SELECT语句.我们的想法是,当调用command.ExecuteReader时,两个命令都将运行,但将返回SELECT命令的结果(因为它是最后一个命令).
升级到Npgsql版本3.0.3.0后,datareader中的值(来自SELECT语句)仍然是原始值,而不是更新的值(代码中的Return dr(“action”)行).我尝试了每个不同的IsolationLevel,它们都给出了相同的结果(就好像SELECT语句没有看到INSERT语句中的更新值).该值在数据库中正确更新(如果我重新查询记录,它具有更新的值).
我可以拆分它并使用两个单独的NpgsqlCommand(一个用于INSERT,另一个用于SELECT),但我不想创建第二次往返服务器.
这是一个简化的函数,实际功能的目的是更新数据库服务器上的记录,然后使用服务器更新的任何其他字段更新应用程序中的对象(例如更新的“last_updated”时间戳字段每次更新记录时在服务器上).
有没有办法使这个工作与Npgsql V3.0.3.0?
Public Function UpdateRecordExample(ID As GuID,newAction As String) As String Using conn As New NpgsqlConnection("Connection String Here") Using trans = conn.BeginTransaction(IsolationLevel.ReadUncommitted) Dim command = conn.CreateCommand command.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord command.CommandText = "Update pm.action_item SET action=@action WHERE ID=@ID; SELECT * FROM pm.action_item WHERE ID=@ID;" command.Parameters.Add(New NpgsqlParameter("ID",ID)) command.Parameters.Add(New NpgsqlParameter("action",newAction)) Using dr = command.ExecuteReader If dr.Read Then Return dr("action") 'This is still the original value and not "newAction" Else Throw New DBConcurrencyException End If End Using End Using End Using End Function解决方法 请注意,此问题已在Npgsql 3.1中得到解决. 总结
以上是内存溢出为你收集整理的.net – 具有多个语句的Npgsql命令全部内容,希望文章能够帮你解决.net – 具有多个语句的Npgsql命令所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)