我正在攻击第三方xml api.他们定义了一个类似于以下所需的xml结构.
<ns1:E xmlns:ns1="schema">
<ns1:B>
<ns2:S>
<ns2:V>
<ns2:Bl />
</ns2:V>
</ns2:S>
</ns1:B>
</ns1:E>
Run Code Online (Sandbox Code Playgroud)
有一个SQL表,其中包含我需要放入此xml格式的信息.我有一个LINQ to SQL适配器来获取数据,我正在使用a System.Xml来创建XML文档.
XmlDocument.CreateElement("ns1:E"); etc
Run Code Online (Sandbox Code Playgroud)
只要我从元素名称中删除冒号,这样就可以正常工作.使用冒号,只有冒号的右侧是元素名称.我知道冒号是禁止的,但我对第三方api所指控的内容没有任何控制权.
有什么方法可以解决这个问题?是否有任何有用的方法可以强制冒号进入元素名称?我不必使用XMLDocument但不确定其他方法会让我在那里.
更新:我意识到指的<ns1:是命名空间.是的,有2.当写出XML时,如果我说 - 我可以让它工作 -
XmlDocument.CreateElement(ns1:E", "http://schema);
Run Code Online (Sandbox Code Playgroud)
但是,这是XML输出
<ns1:E xmlns:ns1="http://schema">
Run Code Online (Sandbox Code Playgroud)
如果我只是说XmlDocument.CreateElement("ns1:E");没有uri,那么输出就是<E>.我不希望输出具有架构引用,但我需要有前缀.我想要实现的结果很简单<ns1:E>.两个namspace都在顶部声明,我认为这意味着我必须在每个节点声明它们.
我正在使用SqlBulkCopy将一些表中的一些记录批量插入到另一个表中.该查询使用SqlDataReader来获取数据.表之间的一个重要区别(除了在映射中处理的列顺序之外)是目标表具有日期列,需要在该日期列中添加当前日期.此日期不在源表中.如何将此添加到当前正常工作的流程中减去此项?
当前的工作代码如下所示:
SqlCommand cmd = new SqlCommand("SELECT * from dbo.source", cn);
SqlDataReader rdr = cmd.ExecuteReader();
using (SqlBulkCopy copy = new SqlBulkCopy(cn))
{
copy.ColumnMappings.Add(0, 0);
copy.ColumnMappings.Add(1, 2);
copy.ColumnMappings.Add(3, 3);
copy.ColumnMappings.Add(2, 4);
copy.ColumnMappings.Add(5, 5);
copy.ColumnMappings.Add(14, 6);
copy.DestinationTableName = "destination";
copy.WriteToServer(rdr);
}
Run Code Online (Sandbox Code Playgroud)
DB是sql 2008 ENT.
在我的WPF应用程序(csharp)中,我有一个事件处理程序,当触发时将打开应用程序的新窗口(窗口B)并显示一些数据.但是,当再次触发事件时,如果新窗口(窗口B)仍然打开,我不想生成窗口B的另一个实例,而只是更新当前实例中显示的数据.所以问题是:如何检测窗口B是否已经存在且仅在尚未打开时才打开,否则只需更新数据?
我找到了Application.Current.Window集合,但不知怎的,这对我来说还不起作用.想法?
我有一个这样的数据表.
date, amount, price
2009-10-12, 20, 15.43
2009-10-13, -10, 6.98
Run Code Online (Sandbox Code Playgroud)
我需要编写一个存储过程来返回这些列,并创建一个新列,指示数量是正数还是负数.所以程序的最终结果看起来像这样.
date, amount, price, result
2009-10-12, 20, 15.43, positive
2009-10-13, -10, 6.98, negative
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?这是一个sql 2008 ent db.