有一个小系统,其中数据库表作为MSSQL 2005上的队列.一些应用程序正在写入此表,一个应用程序正在以FIFO方式读取和处理.
我必须使它更先进,以便能够创建一个分布式系统,其中可以运行多个处理应用程序.结果应该是2-10处理应用程序应该能够运行并且它们在工作期间不应该相互干扰.
我的想法是扩展队列表,其中一行显示进程已在处理它.处理应用程序将首先使用idetifyer更新表,然后请求更新的记录.
所以像这样:
start transaction
update top(10) queue set processing = 'myid' where processing is null
select * from processing where processing = 'myid'
end transaction
Run Code Online (Sandbox Code Playgroud)
在处理之后,它将表的处理列设置为其他内容,例如"完成"或其他任何内容.
关于这种方法,我有三个问题.
第一:这可以用这种形式吗?
第二:如果它有效,它是否有效?你有什么其他想法来创建这样的发行版吗?
第三:在MSSQL中,锁定是基于行的,但是在锁定了一定数量的行之后,锁定会扩展到整个表.因此,在第一个应用程序未释放事务之前,第二个应用程序无法访问它.选择有多大(顶部x)以便不锁定整个表,只创建行锁?
我尝试了一切让我们的ClickOnce VB.NET应用程序作为RemoteApp在终端服务下运行.我有一个批处理文件,运行应用程序的.application文件.
这可以通过终端服务器上的RDP桌面会话正常工作.然而,作为TS RemoteApp,嗯......不是那么多.
我在客户端系统上得到一个快速命令提示符(批处理文件)然后......没有...
同样可以直接指向.application文件(不使用批处理文件),甚至可以在本地复制出版本并让它指向它.
我发现了一个关于类似问题的technet.microsoft.com讨论,但没有列出它的解决方案.
对于之前遇到过这种情况并且让它工作的人来说,你需要做什么?
我们目前将RemoteApp用于该服务器上的其他所有内容,因此我希望尽可能坚持使用它.
目前的解决方法是,当我们通过OneClick发布到网络时,在我们的终端服务器上为应用程序构建和运行基于MSI的安装程序,但这有时会非常痛苦并且很容易忘记.
由于应用程序在完全桌面模式下运行时通过终端服务正常工作,但在RemoteApp期间不能正常工作,我认为这不是特定于终端服务器权限的任何内容,因为ClickOnce需要在作为RemoteApp运行时不可用的东西.
我需要以编程方式从sourcesafe数据库中获取文件.知道怎么做吗?
ps:我会通过使用C#来做到这一点.
我想使用SQL事件探查器来跟踪在我的数据库中再次执行的查询,跟踪性能等.但是,似乎SQL事件探查器仅在SQL Server 2005的企业版中可用.这是否确实如此,我可以做些什么关于它?
我的Web应用程序试图在MSSQL 2005数据库上执行SELECT INTO时遇到此错误.我真的有两个问题:
如何编写SQL代码来INSERT(或UPDATE)一个值数组(可能是一个伴随的字段名数组,或者带有两者的矩阵),而不需要简单的迭代?
我试图从一个表插入一行的副本到另一个具有相同模式的表,并添加一列(时间戳)以提供MS Sql Server 2005中第一个表的"历史记录".
所以,我的查询,没有附加列将是:
"SELECT INTO [WebsiteHistory] FROM [Website]"
Run Code Online (Sandbox Code Playgroud)
我也希望填充时间戳列,但我不确定如何最好地执行此操作.我想做点什么:
"SELECT Website.*, '" + DateTime.Now.ToShortDateString() + "' INTO [WebsiteHistory] FROM [Website]"
Run Code Online (Sandbox Code Playgroud)
但这不应该工作,特别是如果timestamp列不是最后一列.有没有办法做到这一点?
Sql server抱怨这个IF NOT EXISTS语句,说关键字'OR'附近有'错误的语法'.
我的查询:
IF NOT EXISTS (
(SELECT * FROM Users where userID = 1)
OR
(SELECT * FROM sales WHERE saleID = 1)
)
BEGIN
// blah blah blah
END
Run Code Online (Sandbox Code Playgroud) 这是我在ASP.NET应用程序生命周期中定期运行的方法的第一次破解,以清理存储在我的数据库中的过期会话.它似乎工作得很好,但我的软件工程师对这段代码感觉不对.我已经使用LINQ to SQL几个月了,但我对以下代码不太自信.我担心一些事情:
以下代码是否可以在我的应用程序中的不同线程访问数据库的情况下运行?我对交易的想法有一个很好的理解,但我想确保我正确使用它们.
我的查询是否会导致性能问题?或者在这种情况下选择此特定表中的所有记录是否合适?此方法仅每15分钟运行一次,因此不会在短时间内反复进行查询.
有没有更好的方法可以做到这一点?我有一种唠叨的感觉.
码:
/// <summary>
/// Method, run periodically, to remove all sign in records that correspond to expired sessions.
/// </summary>
/// <param name="connectionString">Database connection string</param>
/// <returns>Number of expired sign in records removed</returns>
public static int Clean(String connectionString)
{
MyDatabaseDataContext db = new MyDatabaseDataContext(connectionString);
var signIns = db.SignIns.Select(x => x);
int removeCount = 0;
using (TransactionScope scope = new TransactionScope())
{
foreach (SignIn signIn in signIns)
{
DateTime currentTime = DateTime.Now;
TimeSpan span = …Run Code Online (Sandbox Code Playgroud) 我最近从VSS迁移到TFS 2010,我一直非常喜欢它,但是我还没有能够以我认为的方式工作.
GOALS
我想快速了解开发工具的更改何时会破坏构建.如果我们事后发现,这没什么大不了的.由于很多签到都是在一天中发生的,所以我们不想等待构建完成,所以它应该是异步的.
通过我们的主分支,我想确保在合并发生的任何时候,我们确保它不会破坏构建.我想立即得到反馈.等待时间很好,因为我们不会经常合并到Main.
当前设置
我的解决方案位于名为Main的文件夹下.我做了一个名为Development的分支.我正在工作的工作区与顶层相关联,包括Main和Development分支.我尝试调整我的工作区只指向开发,以防出现问题.这似乎没有解决我的问题,所以我把它重新设置为我原来的方式 - 包括Main和Development.
在工作空间的构建定义中,我定义了两个定义 - 一个用于主分支,另一个用于开发.
第一个定义是构建Main分支.它有一个Gated Check-In触发器,"要建立的项目"指向Main中的解决方案文件.
第二个定义是在Development分支中构建解决方案.它有一个Rolling Builds触发器,"Items to Build"指向Development中的解决方案文件.
结果
目前,当在开发中进行更改并执行签入时,将触发对Main的门控签入.这不仅会造成混乱,而且还会减慢我们的整体流程.
下一步
我已经看了一些TFS指南分支,一般TFS使用等等.不幸的是,我还没有找到解决我的问题的方法.如果你以前遇到过这个问题,我会很感激你能给出的任何建议.
sql ×4
sql-server ×4
c# ×3
t-sql ×2
.net ×1
bulkinsert ×1
clickonce ×1
linq-to-sql ×1
performance ×1
remoteapp ×1
tfs ×1
tfs2010 ×1
tfsbuild ×1
tfvc ×1
transactions ×1
vb.net ×1