小编Bre*_*Dev的帖子

SQL Server查询 - 如果不匹配,则返回null值

我遇到了一个我出于某种原因无法弄清楚的问题.我正在尝试编写一个连接两个表的查询,其中可能在表中找不到匹配项.如:

SELECT 
    Table1.IDField, Table2.IDField
FROM 
    Table1
LEFT OUTER JOIN 
    Table2 ON Table1.PersonID = Table2.PersonID
WHERE 
    (Table1.IDField = '12345')
    AND (Table2.Category = 'Foo')
Run Code Online (Sandbox Code Playgroud)

如果没有匹配Table2,则不返回任何内容.但是,如果没有匹配并且仍然从中返回值,我需要它为该列返回NULL Table1.

我已经改变了JOIN我能想到的一切,但无济于事.

Table2.Category可以包含多个其他值,因此执行某种OR IS NULL交易将无效.

所以,如果没有匹配Table2.Category = 'Foo',我仍然需要它返回:

Table1 | Table2
----------------
 12345 |  NULL
Run Code Online (Sandbox Code Playgroud)

有什么建议?

sql sql-server join

15
推荐指数
2
解决办法
2万
查看次数

取消长时间操作的最佳方法是什么?

我遇到了一个我不确定如何解决的问题.我有一个方法,其中包含来自填充数据表的服务的调用,例如:

private void GetCases()
{
    try
    {
        //Setup our criteria
        Web_search_criteria myCriteria = new Web_search_criteria()
        {
            Keynum = 9, //Use Opening Date Key
            Range_start = "20100101", //01-01-2010
            Range_end = "20121223" //12-23-2013
        };


        //The myCases object is a datatable that is populated from the GetCasesDT() call.
        int status = db.server.GetCasesDT(myCriteria, ref myCases);
    }
    catch (Exception ex)
    {
        XtraMessageBox.Show("Unable to get data: " + ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,正如你所看到的,我没有办法一次抓住几个案例 - 它只是抓住了一切.

现在,我在BackgroundWorker的DoWork事件中调用了这个方法,并在其上显示另一个带有选取框进度条的表单,以便用户知道系统实际上正在执行某些操作.在那个表单上,我有一个我订阅的取消按钮.这是执行此操作的代码:

    backgroundWorker1 = new BackgroundWorker() 
    { 
        WorkerSupportsCancellation = true,
        WorkerReportsProgress = true …
Run Code Online (Sandbox Code Playgroud)

c# multithreading process backgroundworker

7
推荐指数
1
解决办法
234
查看次数

等待多个异步调用完成?

我必须从WCF服务调用三种不同的异步方法.我有以下方法,包括所有三个调用:

private async Task CreateMultipleTasksAsync()
{
    CrimcaseServiceClient client = new CrimcaseServiceClient(
        new BasicHttpBinding(),
        new EndpointAddress("http://192.168.1.100/FooService/FooService.svc")
        );

    client.GetEventCompleted += OnGotEventResult;
    client.GetEventAsync(eventInfo);

    client.GetLocationsCompleted += OnGotLocationsResult;
    client.GetLocationsAsync();

    client.GetTypesCompleted += OnGotTypesResult;
    client.GetTypesAsync();
}
Run Code Online (Sandbox Code Playgroud)

完成所有三个调用后,我需要填充一些值.但是,我似乎遇到了如何等待所有三个人首先完成的问题.

我已经尝试过这样做,使用这个调用,但它仍然没有等待所有的调用完成后再继续下一段代码:

private void GrabData()
{
    var task = Task.Run(async () => { await CreateMultipleTasksAsync(); });
    task.Wait();
}
Run Code Online (Sandbox Code Playgroud)

任何建议都会非常感激,因为我在这一点上做了什么.

感谢大家.

c# asynchronous async-await

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