使用具有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) 我在寻找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个你正在寻找的东西时,我会坚持你会如何编写匹配条款.
我有一些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)