我有很多.NET进程从SQL Server 2008数据库表读取消息并一次处理一个.我实现了一个简单的SP来"锁定"任何一个进程正在读取的行,以避免任何两个进程处理同一行.
BEGIN TRAN
SELECT @status = status FROM t WHERE t.id = @id
IF @status = 'L'
BEGIN
-- Already locked by another process. Skip this
RETURN 0
END
ELSE
UPDATE t SET status = 'L' WHERE id = @id
RETURN 1
END
COMMIT
Run Code Online (Sandbox Code Playgroud)
然而,这是有缺陷的:有时一行被"锁定"并处理两次.我怀疑存在并发问题:两个进程在更新之前读取状态.
我认为这可以通过某种方式实现一个读取块来解决(即使事务块读取),但我不确定如何做到这一点.有人可以帮忙吗?
非常感谢提前
瑞安
我有一个Dynamics 2011仪表板,其中包含通过iFrame链接和SSRS报告.它工作得很好,但我正在查看的报告刷新很慢.我想安排报告并让仪表板自动指向最新的快照.
有没有办法做到这一点?
提前致谢
瑞安
我正在尝试转换表单的DataTable
Key Value
1 A
1 B
1 C
2 X
2 Y
Run Code Online (Sandbox Code Playgroud)
到字典
1 [A,B,C]
2 [X,Y]
Run Code Online (Sandbox Code Playgroud)
我正在使用的lambda表达式是
GetTable("..sql..").AsEnumerable().
.Select(r => new {Key = r.Field<int>("Key"), Val = r.Field<string>("Value")})
.GroupBy(g => g.Key)
.ToDictionary(a => a.Key, a => String.Join(",", a.Value))
Run Code Online (Sandbox Code Playgroud)
但它失败了"无法将lambda表达式转换为'System.Collections.Generic.IEqualityComparer',因为它不是委托类型"
我怎么能做到这一点?
我使用通用电子邮件地址向三个不同位置的客户发送电子邮件.任何错误/不在办公室的回复都应该送到当地办事处供他们处理.所以我使用:
来自:common@abc.com回复:london@abc.com
来自:common@abc.com回复:newyork@abc.com
来自:common@abc.com回复:tokyo@abc.com
这似乎适用于电子邮件失败(错误的地址等),但Exchange的外出回复总是转到发件人地址common@abc.com.我需要他们去当地的办公室,回复地址.
知道如何解决这个问题吗?我使用标准MailMessage从c#发送电子邮件:
MailMessage mail = new
mail.Subject = mailDetail["subject"].ToString();
mail.Body = mailDetail["body"].ToString();
// From
mail.From = new MailAddress(ConfigManager.GetSetting("MailSender"));
// Reply to (boucebacks / out of office etc)
mail.ReplyTo = new MailAddress(mailDetail["reply_to"].ToString());
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助,
瑞安
我的log4net配置是这样的:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="xxx" />
<from value="xxx" />
...
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<filter type="MyApp.Logging.EmailLogThrottler">
</filter>
</appender>
Run Code Online (Sandbox Code Playgroud)
如果我在我的MyApp.Logging.EmailLogThrottler班级中设置断点,我看到它正在接收要过滤的INFO消息.EmailLogThrottler相当昂贵,因此我只希望它根据评估者阈值接收ERROR消息.这可能吗?
次要问题 - 似乎首先应用过滤器然后应用评估器阈值(这对我来说是反直觉的).这个假设是否正确?
我知道之前已经以类似的方式询问过这个问题,但我似乎无法让这个问题起作用.
我有一些xml:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Research xmlns="http://www.rixml.org/2005/3/RIXML" xmlns:xalan="http://xml.apache.org/xalan" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" createDateTime="2011-03-29T15:41:48Z" language="eng" researchID="MusiJvs3008">
<Product productID="MusiJvs3008">
<StatusInfo currentStatusIndicator="Yes" statusDateTime="2011-03-29T15:41:48Z" statusType="Published" />
<Source>
<Organization type="SellSideFirm" primaryIndicator="Yes">
<OrganizationID idType="Reuters">9999</OrganizationID>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用xpath读取值:
XPathDocument xmldoc = new XPathDocument(xmlFile);
XPathNavigator nav = xmldoc.CreateNavigator();
XmlNamespaceManager nsMgr = new XmlNamespaceManager(nav.NameTable);
nsMgr.AddNamespace(string.Empty, "http://www.rixml.org/2005/3/RIXML");
XPathNavigator result = nav.SelectSingleNode("/Research", nsMgr); // <-- Returns null!
Run Code Online (Sandbox Code Playgroud)
但即使是简单的根节点选择也会返回null!我确信我的命名空间有问题.有人可以帮忙吗?
理想情况下,我想要简单的线条,让我从xml文件中选择值,即
String a = xmlDoc.SelectSingleNode(@"/Research/Product/Content/Title").Value;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我没有(直接)控制XML文件内容.
我的工作流程有"提示和响应"对话框.我可以使用API运行工作流程ExecuteWorkflowRequest但是如何为提示和响应输入提供值?
是否可以从ac#表达式设置服务器标签的属性,即类似
<asp:TextBox Width='<%= [some c# expression] %>'/>
Run Code Online (Sandbox Code Playgroud)
?
我虽然这很简单,但我无法运行这样的表达式.
谢谢你的帮助
瑞安
如果我从多个线程调用一些数据访问方法,我是否需要锁定数据库调用周围的代码以确保一致性,或者使用下面的使用语句是原子的吗?
public static DataRow GetData(Int32 id)
{
using (SqlConnection con = new SqlConnection(connectionString);)
{
con.Open();
SqlCommand cmd = ...
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(...)
cmd.Parameters.Add(...)
DataTable dt = new DataTable();
return new SqlDataAdapter(cmd).FillWithRetry(dt, sqlGetEmail.CommandText);
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为一个线程可以影响定义的连接对象和另一个的"使用中".
我有一个带有以下中继器的ASP页面:
<asp:Repeater runat="server" ID="RegionRepeater"
DataSourceID="SqlDataSourceRegions" EnableViewState="true">
<ItemTemplate>
<tr>
<td valign="top">
<b><%#Eval("description")%></b>
<asp:HiddenField runat="server" ID="RegionID"
Value='<%#Eval("region_id")%>'/>
</td>
<td>
<asp:FileUpload ID="FileUpload" runat="server" Width="368px" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
(转发器位于向导内部,位于内容窗格内).
后面的代码连接到
protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
Run Code Online (Sandbox Code Playgroud)
事件.屏幕上有两个项目(表格内有两行).但是,当代码尝试读取这些项时,Items集合为空!
foreach(RepeaterItem region in RegionRepeater.Items)
{
// Never runs - the RegionRepeater.Items.Count = 0
FileUpload fileUpload = (FileUpload) region.FindControl("FileUpload");
String regionID = ((HiddenField)region.FindControl("RegionID")).Value;
...
Run Code Online (Sandbox Code Playgroud)
当屏幕上绘制了控件时,为什么集合为空?
非常感谢任何帮助; 这开始让我疯狂.
(顺便说一下:我尝试添加/删除EnableViewState ="true"标签)
有没有办法在c#中显示int的表示形式?
即
1 = 00001
20 = 10100
Run Code Online (Sandbox Code Playgroud)
等等
我尝试过使用BitConverter没有运气.这应该很简单,但我找不到解决方案!
c# ×6
.net ×3
asp.net ×2
bit ×1
concurrency ×1
crm ×1
dashboard ×1
dynamics-crm ×1
email ×1
linq ×1
locking ×1
log4net ×1
namespaces ×1
repeater ×1
smtp ×1
sql ×1
sql-server ×1
transactions ×1
web-controls ×1
workflow ×1
xml ×1