小编Dav*_*ner的帖子

取消异步查询时的SQLException

使用具有CancellationToken的新的.Net 4.5 Async/Await功能,我SQLException在取消ExecuteNonQueryAsync呼叫时得到一个,而不是OperationCanceledException(或某个特定于取消操作的其他异常).该SQLException不会说Operation cancelled by user在邮件的末尾.我期望在取消操作时抛出更具体的异常.另外,我如何创建适当的Try/Catch处理程序来处理这种预期的情况?我通常会有SQLException更一般的故障块,但现在我必须梳理出消息的文本,看看这只是用户点击取消按钮!?我肯定错过了什么.

这是一个简单的VB WinForm应用程序,它有两个按钮,一个用于执行异步调用,另一个用于取消.第一个按钮中的Try/Catch显示SQLException第二个按钮调用Cancel方法时被点击的按钮.

Dim _cts As CancellationTokenSource
Private Async Sub btnLocalTest_Click(sender As Object, e As EventArgs) Handles btnLocalTest.Click
    _cts = New CancellationTokenSource()
    Dim CancelToken As CancellationToken = _cts.Token
    Using sconn As New SqlConnection("server=(local);database=MyDB;user id=MyUser;password=MyPassword")
        sconn.Open()
        Dim SQL As String = some long running SELECT or INSERT statement
        Try
            Using scmd As New SqlCommand(SQL, sconn)
                scmd.CommandTimeout = 300
                Dim i As Integer …
Run Code Online (Sandbox Code Playgroud)

.net async-await

9
推荐指数
1
解决办法
1662
查看次数

Cypher查询以查找具有3个关系的节点

我在寻找2个关系时想出了如何编写此查询,但不确定如何为查询添加更多关系.

假设您有一个带有"阅读器"和"书籍"作为节点的图书俱乐部数据库.'book'节点具有'genre'属性(用于定义该书是小说,非小说,传记,参考等).在'读者'节点和'书'节点之间存在关系"HasRead"有人读了一本特定的书.

如果我想找到读过小说非小说类书籍的读者,我可以执行这个Cypher查询:

Start b1=node:MyBookIndex('Genre:Fiction'), 
      b2=node:MyBookIndex('Genre:Non-Fiction')
Match b1-[:HadRead]-r-[:HasRead]-b2
Return r.ReaderName
Run Code Online (Sandbox Code Playgroud)

上述查询的关键是Match子句,它具有两个书籍别名,r用于"读者"节点的别名.

问题:如何编写查询以查找已阅读过小说非小说参考书籍的用户?当你有超过2个你正在寻找的东西时,我会坚持你会如何编写匹配条款.

neo4j cypher

3
推荐指数
1
解决办法
1976
查看次数

截断事务中的Oracle临时表,截断*ALL*Temp表

我有一些C#代码,它在事务中创建了几个带有"ON COMMIT DELETE ROWS"选项的Oracle临时表.

在事务内部,我将一堆行插入到各种临时表中.在某些情况下,我需要截断一个特定的临时表,以便我可以从该表开始新的,但保留其他临时表.

我发现Oracle在执行Truncate时必须执行隐式COMMIT,因为不仅特定临时表被截断,而且所有临时表都被截断.

好的,我在别处读过Truncate命令被认为是一个DDL命令,这就是处理提交的原因,这导致我的"ON COMMIT DELETE ROWS"临时表被清除.

如果这是真的,那么创建一个新临时表的行为也不会是一个DDL命令,并且它也会跳过同一个提交清除所有其他临时表吗?如果是这样,我没有看到这种行为.我在代码中创建了新的临时表,发现在创建新的临时表之后,先前创建的临时表仍然保持其行的完整性.

这里有一些C#代码演示了这个问题(这里没有包含帮助程序):

private void RunTest()
{
  if (_oc == null)
    _oc = new OracleConnection("data source=myserver;user id=myid;password=mypassword");

  _oc.Open();
  _tran = _oc.BeginTransaction();

  string tt1 = "DMTEST1";
  AddTempTable(tt1, false);
  int TempTableRowCount0 = GetTempTableRowCount(tt1);

  AddRows(tt1, 5);
  int TempTableRowCount10 = GetTempTableRowCount(tt1);

  string tt2 = "DMTEST2";
  AddTempTable(tt2, false);
  int TempTableRowCount12 = GetTempTableRowCount(tt1); // This will have the same value as TempTableRowCount10
  AddRows(tt2, 6);
  int TempTableRowCount13 = GetTempTableRowCount(tt2); // This will have the same value …
Run Code Online (Sandbox Code Playgroud)

c# oracle transactions temporary

2
推荐指数
1
解决办法
2119
查看次数

标签 统计

.net ×1

async-await ×1

c# ×1

cypher ×1

neo4j ×1

oracle ×1

temporary ×1

transactions ×1