小编Jon*_*ton的帖子

读取XML属性VBA

我试图在VBA中获取单个节点的属性,但无法使用DOM来管理它

XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
   <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <soap:Body>
         <GetUserInfoResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/directory/">
            <GetUserInfoResult>
               <GetUserInfo>
                  <User ID="16" Name="" LoginName="login" Email="" Notes="" IsSiteAdmin="False" IsDomainGroup="False" />
            </GetUserInfo>
         </GetUserInfoResult>
      </GetUserInfoResponse>
   </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

我基本上只是想获取ID属性的值.任何帮助,将不胜感激.

xml excel vba soap dom

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

在线/离线获取磁盘

我有一个程序正在对Windows中的磁盘执行原始IO.

如果目标磁盘在线,则一切正常.但是,某些Windows操作系统中的默认行为是使新磁盘最初脱机.

我很难找到在Windows上执行此操作的正确API.等效的命令行将是这样的:

"select disk 2", "online disk" | diskpart
Run Code Online (Sandbox Code Playgroud)

但是我需要能够在代码中执行此操作.我查看了DeviceIoControl Win32 API(我认为是正确的)但无法确定要使用的控件代码.我无法找到它的事实让我觉得我可能错过了一个更好的API来使用.

c# winapi deviceiocontrol

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

方法重载的通用约束

我有一个带有一些泛型方法的接口,我想实现一个带有重载的方法来接受一个类的实例,或者它的PK值(它是一个int或GUID但确实有所不同).

我添加了类似这些示例的方法:

    void DoSomething<TKey>(TKey key) where TKey: struct;
    void DoSomething<TModel>(TModel model) where TModel : class;
Run Code Online (Sandbox Code Playgroud)

其中第二个上的"DoSomething"方法名称突出显示,错误是

类型'ISomeStuff'已经定义了一个名为'DoSomething'的成员,它具有相同的参数类型.

我对此感到惊讶,因为我已经通过参数明确定义了不同类型:一个是类,另一个是结构.

为什么这不足以使签名不同?

c# generics overloading

5
推荐指数
2
解决办法
3355
查看次数

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

使用C#在XML序列化中允许重复的节点名称

我正在尝试使用C#序列化具有重复节点名称的对象,我需要这样做的原因是因为我正在构建一个使用第三方API的库.

我需要构建的请求看起来像这样.

<DATASET>
   <SITE_ID>123</SITE_ID>
   <DATA type=“name”>Secondary List</DATA>
   <DATA type="extra" id="CLICKTHRU_URL">http://my.domain.com/</DATA>
   <DATA type="extra" id="REPLY_FORWARD_EMAIL">support@my.domain.com</DATA>
   <DATA type="extra" id="REPLY_FROM_EMAIL">forward@my.domain.com</DATA>
   <DATA type="extra" id="REPLY_FROM_NAME">8@yahoo.com</DATA>
   <DATA type="extra" id="REPLY_FORWARD_SUBJECT">Customer Replies</DATA>
   <DATA type="extra" id="HANDLE_UNSUBSCRIBE"></DATA>
   <DATA type="extra" id="HANDLE_AUTOREPLY"></DATA>
   <DATA type="extra" id="FOOTER_TEXT">Confidentiality agreement…</DATA>
   <DATA type="extra" id="FOOTER_HTML"> Confidentiality agreement…</DATA>
</DATASET>
Run Code Online (Sandbox Code Playgroud)

我的方法是创建一个表示请求的类并使用XML序列化属性,该类如下所示:

[XmlRoot("DataSet")]
public class AddListCallHolder : BaseCallHolder
{
    private BaseAttributeHolder _name = new BaseAttributeHolder(type: "");

    [XmlElement("DATA")]
    public BaseAttributeHolder Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private BaseAttributeHolder _clickthruUrl = new BaseAttributeHolder(id: "CLICKTHRU_URL");

    [XmlElement("DATA")]
    public …
Run Code Online (Sandbox Code Playgroud)

c# xml asp.net

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

WCF单一服务实现,多种行为.可能

我有一个IIS7托管服务,我需要向两个不同的客户端公开.对于其中一个客户端,我需要强制执行比另一个更严格的限制行为.

这意味着我需要定义两个标签,因为这些只能从标签中引用,那么我还需要其中两个?

我已经定义了以下web.config.问题是,当我尝试浏览到任一服务以便我可以提取元数据时,我收到以下错误:

Parser Error Message: A child element named 'service' with same key already exists at the same configuration scope.
Collection elements must be unique within the same configuration scope (e.g. the same application.config file). Duplicate key value:  'WCFTwoEndpoints.Calculate'.
Run Code Online (Sandbox Code Playgroud)

我是以正确的方式来做这件事的吗?

<system.serviceModel>
    <services>
      <service name="WCFTwoEndpoints.Calculate" behaviorConfiguration ="NotThrottled">
        <endpoint address="http://localhost/WCFTwoEndpoints/Calculate.svc"
          binding="wsHttpBinding" bindingConfiguration="" name="Calculator"
          contract="WCFTwoEndpoints.ICalculate" />
        <endpoint binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
      </service>
      <service name="WCFTwoEndpoints.Calculate" behaviorConfiguration ="Throttled">
        <endpoint address="http://localhost/WCFTwoEndpoints/ThrottledCalculate.svc"
          binding="wsHttpBinding" bindingConfiguration="" name="ThrottledCalculator"
          contract="WCFTwoEndpoints.ICalculate" />
        <endpoint binding="mexHttpBinding" name="mex" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors> …
Run Code Online (Sandbox Code Playgroud)

wcf

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

将自定义Linq-2-SQL迁移到Entity Framework

我有一个基于.net 3.5中的Linq-2-SQL构建的数据层.我们正在考虑很快迁移到.Net 4. 当我们开始原始开发时,我有兴趣将EF用于数据层,但发现它在.Net 3.5中并不是真正的选项.现在我们正在升级,我正在思考它.

我意识到.Net4仍然支持L2S,但是我希望切换到更活跃的开发领域,以便将来可以成为业务核心的系统的未来验证.(我的理解是基于诸如"我们说我们会改进它的核心(L2S)并在有意义的地方添加客户请求但是实体框架将成为主要关注点"这样的陈述.来自Damien Guard的评论到这篇文章.

使它复杂化的是我们为L2S实现做了一些改进:

  • 我们已经定制了.tt生成文件和L2ST4.
  • 我们正在为所有CRUD操作(我们自动生成)使用存储过程,因为这允许我们根据需要在特定表上打开/关闭粒度审计跟踪.

我所知道的其余大部分内容都是可以的,因为我自己在EF4中完成了它(事实上很多都是在EF4数据库上开始的),但是我想知道上面的自定义是否会成为问题.

所以:

  • 我们还可以拥有定制的.tt类型生成系统(或类似的东西)吗?
  • 我们还可以使用自己定义的sprocs来进行CRUD吗?

注意:如果我们使用EF,我可能会使用Database First版本.

c# linq entity-framework

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

SQL Delete清除表而不是错误

我有一块SQL(你认为)不会编译,而是删除目标表中的所有行.

考虑这个设置:

create table TableA (ColumnA varchar(200));
create table TableB (ColumnB varchar(200));

insert TableA values ('A'),('B'),('C');
insert TableB values ('A');
Run Code Online (Sandbox Code Playgroud)

然后是以下sql:

--Returns all rows from TableA
select * from TableA;

--Does not error (ColumnA does not exist on TableB)
delete TableA where ColumnA in (select ColumnA from TableB)

--No Rows are returned
select * from TableA;
Run Code Online (Sandbox Code Playgroud)

上面的delete语句会导致所有行被删除TableA,而不是ColumnA在其中不存在的错误TableB

这里有一个SQL小提琴:http ://www.sqlfiddle.com/#!3/9d883 /6

看来这个ColumnA来自TableA正在被接收,但预计它将"超出范围".

为什么是这样?

t-sql sql-server sql-server-2008 correlated-subquery

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

如何检查同义词后面的表是否存在

我正在尝试创建一个简单的脚本,将复杂视图的结果转储到表中以进行报告.我使用同义词来简化视图和表名的调整.

我们的想法是,脚本的用户可以将他们想要用作的视图的名称作为源,并将目标报告表的名称放在它们开始和离开的位置.如果该表不存在,那么脚本应该创建它.如果表已经存在,那么脚本应该只复制视图中尚未包含在表中的记录.

下面的脚本涵盖了所有这些要求,但我找不到一种很好的方法来检查同义词后面的表是否已经存在:

CREATE SYNONYM SourceView FOR my_view
CREATE SYNONYM TargetReportingTable FOR my_table

-- Here's where I'm having trouble, how do I check if the underlying table exists?
IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_name = TargetReportingTable) = 0
  BEGIN
    -- Table does not exists, so insert into.
    SELECT * INTO TargetReportingTable FROM SourceView
  END
ELSE
  BEGIN
    -- Table already exists so work out the last record which was copied over
    -- and insert only the newer records.
    DECLARE @LastReportedRecordId …
Run Code Online (Sandbox Code Playgroud)

sql sql-server rdbms synonym

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

动态UpdatePanels和UserControls问题

在将项目从3.5迁移到4.5时,在ASP.Net WebForms中遇到了一个有趣的问题.

有问题的网站非常动态 - 该网页是基于CMS方式的配置构建的.

但是在4.5中我们遇到了一个问题 - 当通过按钮点击将更多内容添加到页面中时,并不会显示内容的所有标记.(测试时问题也在.net 4.0中重现).

这里演示的是一个非常简单的示例,它只使用默认的WebForms项目模板(在本例中为VB).

在Default.aspx中添加以下标记:

<asp:UpdatePanel ID="udpTrigger" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:button id="btnGo" runat="server" Text ="Go" />
    </ContentTemplate>
</asp:UpdatePanel>
<asp:Panel ID="pnlContainer" runat="server">
</asp:Panel>
Run Code Online (Sandbox Code Playgroud)

在Default.aspx.vb中添加以下代码:

Dim _udp As UpdatePanel

Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init    
    _udp = New UpdatePanel()
    _udp.ID = "udpTarget"
    _udp.UpdateMode = UpdatePanelUpdateMode.Conditional

    pnlContainer.Controls.Add(_udp)        
End Sub

Private Sub btnGo_Click(sender As Object, e As EventArgs) Handles btnGo.Click    
    Dim ctrl = LoadControl("Control.ascx")        

    Dim pnlWrapper = New Panel With {.ID = "pnlWrapper"}
    pnlWrapper.Controls.Add(ctrl) …
Run Code Online (Sandbox Code Playgroud)

asp.net user-controls updatepanel webforms .net-4.5

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