小编Gar*_*ill的帖子

如何避免在嵌套存储过程中的嵌套事务中使用重复的保存点名称?

我有一个我几乎总是遵循的模式,如果我需要在事务中完成一个操作,我会这样做:

BEGIN TRANSACTION
SAVE TRANSACTION TX

-- Stuff

IF @error <> 0
    ROLLBACK TRANSACTION TX

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

这在过去对我很有帮助,但是在使用这种模式多年后(并复制粘贴上述代码),我突然发现了一个完全令人震惊的缺陷。

很多时候,我会有一个调用其他存储过程的存储过程,所有这些存储过程都使用相同的模式。我发现(以我的成本为代价)是因为我在任何地方都使用相同的保存点名称,所以我可能会遇到我的外部事务部分提交的情况 - 恰恰与我试图实现的原子性相反.

我已经整理了一个展示问题的例子。这是一个单一的批次(没有嵌套的存储过程),因此看起来有点奇怪,因为您可能不会在同一批次中两次使用相同的保存点名称,但我的真实世界场景太混乱而无法发布。

CREATE TABLE Test (test INTEGER NOT NULL)

BEGIN TRAN 
SAVE TRAN TX

    BEGIN TRAN
    SAVE TRAN TX
        INSERT INTO Test(test) VALUES (1)
    COMMIT TRAN TX

    BEGIN TRAN
    SAVE TRAN TX
        INSERT INTO Test(test) VALUES (2)
    COMMIT TRAN TX

    DELETE FROM Test

ROLLBACK TRAN TX
COMMIT TRAN TX

SELECT * FROM Test

DROP TABLE Test
Run Code Online (Sandbox Code Playgroud)

当我执行此操作时,它会列出一条记录,值为“1”。换句话说,即使我回滚了外部事务,表中还是添加了一条记录。

发生的事情是 …

sql t-sql sql-server transactions

5
推荐指数
1
解决办法
1689
查看次数

使用Office"开放"XML - 它有多难?

我正在考虑直接使用Office XML格式替换(非常)大量的Office自动化代码.我刚刚开始,但我已经担心这太重要了.

我将处理Word,Excel和PowerPoint.到目前为止,我只看了Word和Excel.看起来Word文档应该相当容易操作,但Excel工作簿看起来像一场噩梦.例如...

在Word中,看起来您只需删除相应的"w:p"标记即可删除段落.但是,提供的用于删除Excel中的行的代码段大约需要150行代码(!).

Excel代码如此之大的原因是删除行意味着更新所有后续行的行索引,修复"共享字符串"表等.根据顶部的注释,代码片段甚至不完整因为它不会处理有表格的工作簿(我可以忍受).

我不清楚的是这是否是示例代码的唯一限制.例如,如果工作簿包含数据透视表,是否还会出现问题?或者引用同一张表中数据的图表?或者一些命名的范围?您是否还必须更新引用行索引已更改的行的任何单元格(等)的公式?

[更不用说"计算链"了,(谢天谢地)我认为你可以简单地删除,因为它只是一个可以重建的chache.

这就是我的问题,虽然它是毛茸茸的.你有多努力去做一些像正确删除行一样简单的事情?这是一项不可逾越的任务吗?

此外,如果还有其他类似的问题,无论是使用Excel还是使用Word或PowerPoint,我现在都喜欢听到它们,之后我浪费了太多时间去了一条死胡同.谢谢.

office-2007 ms-office openxml office-2010 openxml-sdk

5
推荐指数
1
解决办法
3924
查看次数

VBA项目从Office 2007访问哪些表单控件?

在VBA项目中,您可以使用工具箱窗口创建UserForm并向其添加控件.默认情况下,工具箱窗口包含简单的表单控件,如Label,TextBox,ListBox等.

如果它们已安装在您的计算机上,您可以添加其他控件:右键单击工具箱上的"其他控件"可显示整个控件的冗余部分.但是,这并未说明它们来自何处.

我很想知道在安装了Office 2007的计算机上可以保证哪些控件可用.它只是标准的,还是一些"附加控件"也保证可用(因为它们与Office 2007一起提供,或者因为它们存在于Office 2007将运行的所有Windows版本上)?

例如,我很惊讶即使在Office 2007中也没有树视图控件.在我的"其他控件"列表中,我看到"Microsoft TreeView Control v6",但我不知道我是否可以依赖于所有人我的Office 2007用户.

vba office-2007 ms-office userform

5
推荐指数
1
解决办法
3160
查看次数

将EF代理对象转换为原始POCO对象的最佳方法是什么?

我有一些POCO对象,我在EF Code First上下文中使用.所以,当我用数据填充它们时,我实际上是处理EF代理对象而不是POCO本身.

我有一个ASP.NET MVC4 ApiController,它返回我的POCO对象,我将在客户端应用程序中使用它.

我的"GET"方法看起来像这样:

    // GET api/Clients/5
    public Client GetClient(int id)
    {
        Client client = db.Clients.Find(id);
        if (client == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return client;
    }
Run Code Online (Sandbox Code Playgroud)

这实际上不起作用,因为当序列化程序尝试序列化Client对象时,它实际上正在处理EF代理版本,这导致它打嗝.请参阅ApiController可以返回带有其他对象集合的对象吗?

所以,我可以通过这样做来关闭代理生成DbContext:

    db.Configuration.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)

这确保我正在处理POCO而不是代理.但是,现在我的Client类的大多数成员都没有填充,因为它是EF代理,它懒得加载那些对我来说.

所以我真正想要的是使用EF代理类来获取数据,然后在最后一刻从我的方法返回原始POCO.

如果不在代码中手动创建整个对象(包括任何嵌套对象),我该怎么做?当然必须有一个简单的方法 - 或者至少是某种帮助类?

c# asp.net-mvc-4 asp.net-web-api entity-framework-5

5
推荐指数
1
解决办法
2288
查看次数

为什么我得到"序列不包含元素"?

注意:请参阅底部的编辑.我是一个白痴.

以下代码来处理标记名称集并识别/处理新标记:

IEnumberable<string> tagNames = GetTagNames();
List<Tag> allTags = GetAllTags();

var newTagNames = tagNames.Where(n => !allTags.Any(t => t.Name == n));

foreach (var tagName in newTagNames)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

...并且这很好,除了它没有处理有一个名为"Foo"的标签并且列表包含"foo"的情况.换句话说,它没有进行不区分大小写的比较.

我更改了测试以使用不区分大小写的比较,如下所示:

var newTagNames = tagNames.Where(n => !allTags.Any(t => t.Name.Equals(n, StringComparison.InvariantCultureIgnoreCase)));
Run Code Online (Sandbox Code Playgroud)

...当foreach运行(并调用MoveNext)newTagNames时,我突然抛出一个异常.例外说:

序列没有元素

我很困惑.为什么要foreach坚持序列非空?如果我打电话First(),我希望看到这个错误,但是在使用时却没有foreach


编辑:更多信息.

这一刻变得更加怪异.因为我的代码是异步方法,而且我很迷信,所以我认为引发异常的点与它被捕获和报告的点之间存在太大的"距离".所以,我对一个有问题的代码进行了try/catch,希望能够验证被抛出的异常是我认为的那样.

所以现在我可以在调试器中逐步进入foreach行,我可以验证序列是空的,并且我可以直接进入调试器突出显示单词"in"的位.还有一步,我在我的异常处理程序中.

但是,不是我刚刚添加的异常处理程序,不!它落在我最外层的异常处理程序中,而不访问我最近添加的异常处理程序!它不匹配catch (Exception ex),也不匹配普通catch.(我也确实放了一个finally,并证实它确实在出路时访问了它).

我一直认为,像这样的异常处理程序会捕获任何异常.我现在很害怕.我需要一个成年人.


编辑2:

好吧,嗯,误报......我的本地try/catch没有抓住异常只是因为它没有被我想到的代码引发.正如我上面所说,我看到调试器中的执行从直接的"in"跳转foreach到外部异常处理程序,因此我(错误的)假设这就是错误所在.但是,使用空枚举,这只是函数中执行的最后一个语句,并且由于某种原因,调试器没有向我显示函数的跳出或在调用点执行下一个语句 - 这是在事实上导致错误的那个.

向所有回复的人道歉,如果你想创造一个说我是老生常谈的回答,我会乐意接受.也就是说,如果我再次露出我的脸......

c# linq

5
推荐指数
1
解决办法
1669
查看次数

我如何使EditorFor使用HTML5 min和max属性?

如果我有这样的实体:

class Foo
{
    [Range(0,100)]
    public int Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

......我用EditorFor(m => m.Bar)在MVC视图,它使用HTML5 <input type="number">标签,但使用minmax该标签的属性.有什么我可以做的,让它使用它们?

validation html5 asp.net-mvc-5

5
推荐指数
0
解决办法
587
查看次数

如何将 PDF 文件中的特定 RGB 颜色更改为特定的 CMYK 颜色?

如果我有一个包含特定 RGB 颜色的对象(文本、艺术线条)的 PDF 文件,并且我想将这些对象转换为具有特定的 CMYK 颜色,有哪些可用的库可以让我这样做?

请注意,我不需要能够从任意 RGB 值“映射”到“合适的”CMYK 值——这些值是预先确定的。

.NET/C# 首选,但我会考虑几乎任何东西。

显然,我更喜欢免费/开放的图书馆而不是付费图书馆,但根据许可模式,我也会考虑付费图书馆。

pdf

4
推荐指数
1
解决办法
1507
查看次数

如何在Word表中复制行?

我试图使用VBA复制Word中的表行,而不使用Selection对象或剪贴板.也就是说,我想要一个与现有行具有相同内容的新行.

为此,我首先创建一个新的(空)行,并循环遍历源行中的每个单元格,并将其内容复制到目标行中的相应单元格中.

为了复制每个单元格,我得到一个Range引用源单元格的整个内容Range的对象,以及目标单元格的等效对象,然后执行以下操作:

oToRange.FormattedText = oFromRange.FormattedText
Run Code Online (Sandbox Code Playgroud)

这在Office 2003上运行良好,并且大部分时间都在Office 2010上运行.但是,我遇到了一个特定场景的实际问题.我(大大)简化了这个场景,以展示问题的核心.

在下图中,外(灰色)2R x 1C表中有两个单元格.第二行是要复制的行.第一行是我创建的新行,我想要复制第二行的内容.

在此输入图像描述

您会注意到第二行包含嵌套表.

当我在Word 2003中运行下面的代码时,它完美地工作,我得到以下结果:

在此输入图像描述

但是,在Word 2010中,相同的代码会产生以下结果:

在此输入图像描述

如您所见,单元格内容已在目标表格单元格之前(和之外)插入.

值得一提的是,如果我在嵌套表之后放置一些东西,那么它不再是源单元格中的最后一个东西,那么就不会出现这个问题.

这是我正在使用的完整VBA代码:

Dim oDoc As Word.Document
Set oDoc = ThisDocument

Dim oFromRange As Range
Set oFromRange = ThisDocument.Tables(1).Cell(2, 1).Range
oFromRange.End = oFromRange.End - 1

Dim oToRange As Range
Set oToRange = ThisDocument.Tables(1).Cell(1, 1).Range
oToRange.End = oToRange.End - 1

oToRange.FormattedText = oFromRange.FormattedText
Run Code Online (Sandbox Code Playgroud)

注意:调整到源和目标范围Cell.Range的末尾是必要的,因为包括单元格结束标记,我不想复制它.

我该怎么做才能说服它将内容放在目标单元格内(就像Word 2003那样),而不是之前呢?

vba ms-word office-interop word-vba office-2010

4
推荐指数
1
解决办法
1万
查看次数

结构指令可以使用@ContentChild 来引用子组件吗?

如果我有一个自定义指令ParentDirective和自定义组件,ChildComponent如下所示:

<div appParent>
  <app-child></app-child>
</div>
Run Code Online (Sandbox Code Playgroud)

...然后我可以@ContentChild在指令中使用来引用组件:

@ContentChild(ChildComponent) child: ChildComponent;
Run Code Online (Sandbox Code Playgroud)

请参阅此 StackBlitz 的工作原理。(它登录到控制台以显示该child成员已设置)。

但是,如果我将 appParent 更改为结构指令,则child永远不会设置该成员。

<div *appParent>
  <app-child></app-child>
</div>
Run Code Online (Sandbox Code Playgroud)

请参阅此 StackBlitz

不能@ContentChild与结构指令一起使用吗?

angular-directive angular-components angular

4
推荐指数
1
解决办法
881
查看次数

如何解决“ SSL证书问题:证书链中的自签名证书”错误?

我有一个基于Linux的Docker容器,如果这样做:

curl https://google.com
Run Code Online (Sandbox Code Playgroud)

...然后我得到一个错误:

curl:(60)SSL证书问题:证书链中的自签名证书此处更多详细信息:https : //curl.haxx.se/docs/sslcerts.html

任何网址都会发生同样的情况-并非由Google造成的。

上面引用的链接建议了各种解决方案,除了最后一个建议更新证书存储之外,其他解决方案似乎都不合适。但是,没有关于如何执行此操作的指示(或者至少没有对我有意义的指示)。

那是正确的做法吗?


UPDATE:根据要求,结果如下:

openssl s_client -showcerts -connect www.google.com:443

CONNECTED(00000003)
depth=3 DC = com, DC = forestroot, CN = SHA256RootCA
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com
   i:/CN=ssl-decrypt
-----BEGIN CERTIFICATE-----
MIIDXzCCAkegAwIBAgIIXIk3p8xOX/kwDQYJKoZIhvcNAQELBQAwFjEUMBIGA1UE
AxMLc3NsLWRlY3J5cHQwHhcNMTgxMjE5MDgxNzAwWhcNMTkwMzEzMDgxNzAwWjBo
...
tq0VAGIoj4+YhO6bktTq3alCRoLstJuuxjVdb1wRkH4YRi0I6ZAB1Cw+M8Lg+2eQ
KuEo
-----END CERTIFICATE-----
 1 s:/CN=ssl-decrypt
   i:/DC=com/DC=bgs/CN=SHA256IssueCA
-----BEGIN CERTIFICATE-----
MIIGzDCCBLSgAwIBAgITEQAADvB9T7mSaacwDQABAAAO8DANBgkqhkiG9w0BAQsF
ADBCMRMwEQYKCZImiZPyLGQBGRYDY29tMRMwEQYKCZImiZPyLGQBGRYDYmdzMRYw
...
1z9f/nkj2XTRyGeACoy0qRd5uXJHp1iGM27l3RFDR9OjrfPV56pOBUYWAlc9Nn+1
Vr3qUZrcCkROrmYisVF4jg==
-----END CERTIFICATE-----
 2 s:/DC=com/DC=MyCompanyServer/CN=SHA256IssueCA
   i:/DC=com/DC=MyCompanyServer/CN=SHA256RootCA
-----BEGIN CERTIFICATE-----
MIIH4zCCBcugAwIBAgITOQAAAAOa4wv9nnK0uQAAAAAAAzANBgkqhkiG9w0BAQsF
ADBIMRMwEQYKCZImiZPyLGQBGRYDY29tMRowGAYKCZImiZPyLGQBGRYKZm9yZXN0
...
IomErcbcymIWBmN75PVMsk9EMyqDP394jG8+IOK+lVUVX4pxzhdd7eYbqTAwDE1X
bNWcZZkt/w==
-----END CERTIFICATE-----
 3 s:/DC=com/DC=MyCompanyServer/CN=SHA256RootCA
   i:/DC=com/DC=MyCompanyServer/CN=SHA256RootCA …
Run Code Online (Sandbox Code Playgroud)

ssl curl docker

4
推荐指数
1
解决办法
1万
查看次数