小编Sql*_*yan的帖子

Easiest way to develop/debug a Windows service

I'm developing a Windows Service in VB.NET 2008, but I feel like I'm going to have an aneurysm. To debug the service, I've added a 15 second wait to the initialization code, which gives me time to start the service and attach the .NET debugger before anything happens, so I can hit breakpoints and such. I really miss "integrated" debugging with this type of workaround, and testing seems to be a huge pain.

What's the best way to do "regular" …

.net vb.net debugging windows-services

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

哈希结果是否与源值相同?

这更像是一个加密理论问题,但是哈希算法的结果是否可能与源相同?例如,假设我有一个字符串:

baf34551fecb48acc3da868eb85e1b6dac9de356
Run Code Online (Sandbox Code Playgroud)

如果我得到SHA1哈希,结果是:

4d2f72adbafddfe49a726990a1bcb8d34d3da162
Run Code Online (Sandbox Code Playgroud)

理论上,是否存在这两个值匹配的情况?我不是在这里特别询问SHA1 - 这只是我的例子.我只是想知道是否以这种方式构建散列算法.

hash cryptography hash-code-uniqueness hash-collision

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

.NET Windows以什么顺序形成事件?

我注意到当我使用.NET中的Windows窗体(或任何其他控件,就此而言)时,我可以捕获许多不同的事件 - 在打开时,有:

  • 加载
  • 活性
  • 显示
  • VisibleChanged

关闭时,有:

  • 离开
  • FormClosed
  • 的FormClosing
  • 弃置

加上我错过的任何其他人.我知道我可以在每个事件中放置一个消息框,然后运行我的应用程序并记下订单,但我怀疑我会记住它.

对于表单和其他控件,是否有在线参考列出了发生这些事件顺序?我在MSDN上找不到它,虽然也许我在某个地方错过了它.

.net visual-studio winforms

4
推荐指数
2
解决办法
6836
查看次数

为什么 SQL Server 不自动将 DATE 向上转换为 DATETIME 以进行比较?

我喜欢 SQL Server 2008 中的新 DATE 数据类型,但是当我将 DATE 字段与链接服务器(在本例中为 SQL 2005)上的 DATETIME 字段进行比较时,如下所示:

DECLARE @MyDate DATE
SET @MyDate = CONVERT(DATE, GETDATE())

SELECT *
  FROM MySQL2005LinkedServer.SomeDB.dbo.SomeTable
 WHERE SomeDatetimeField < @MyDate
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

OLE DB provider "SQLNCLI10" returned message "Unspecified error".
OLE DB provider "SQLNCLI10" returned message "The scale is invalid.".
Run Code Online (Sandbox Code Playgroud)

“比例无效”显然是因为本机客户端将 DATE 数据类型传递回链接服务器,而且由于它是 SQL 2005,它不知道如何处理它。对 2008 年服务器运行相同的查询效果很好 - SQL Server 能够毫无问题地比较 DATE 和 DATETIME 数据类型。

这是我的问题 - Native Client 不会自动将“2009-11-09”的 DATE 值转换为“2009-11-09 00:00:00.000”的 DATETIME 以便之前版本的SQL Server 不会被它呛到吗?

sql-server datetime date sql-server-2008 sql-server-native-client

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

存储过程不支持INSERT/EXECUTE INTO的功能原因?

在SQL Server中,无法从存储过程的结果中动态创建临时表,ala:

CREATE TABLE #temptable AS
EXEC spMyStoredProc
Run Code Online (Sandbox Code Playgroud)

要么

EXEC spMyStoredProc INTO #temptable
Run Code Online (Sandbox Code Playgroud)

或类似的东西.相反,您必须事先知道SP布局,并且必须执行以下操作:

CREATE TABLE #temptable (col1 INT, col2 VARCHAR(255))

INSERT INTO #temptable
EXEC spMyStoredProc
Run Code Online (Sandbox Code Playgroud)

是否存在功能性原因?可能是SQL Server的限制?或者它只是尚未添加到SQL规范中的东西,我可以抱有希望有一天它们会支持它吗?

t-sql sql-server stored-procedures temp-tables

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

跨多个线程处理数据库队列 - 设计建议

我有一个SQL Server表,其中包含我的程序需要"跟进"的订单(调用web服务以查看是否已完成某些操作).我的应用程序是多线程的,可以在多个服务器上运行实例.目前,每隔一段时间(在线程计时器上),该过程ORDER BY NEWID()从"未确认"订单列表中随机选择100行并检查它们,标记任何成功返回的行.

问题是线程之间以及不同进程之间存在很多重叠,并且它们无法保证很快就会检查新订单.此外,一些订单永远不会被"确认"并且已经死亡,这意味着它们会妨碍需要确认的订单,如果我一遍又一遍地选择它们,会减慢流程.

我更喜欢的是系统地检查所有未完成的订单.我可以想到两个简单的方法:

  1. 应用程序一次提取一个订单进行检查,将其检查的最后一个订单作为参数传递,然后SQL Server回退下一个未经确认的订单.更多数据库调用,但这确保在合理的时间范围内检查每个订单.但是,不同的服务器可能会不必要地连续重新检查相同的顺序.
  2. SQL Server跟踪它要求进程检查的最后一个顺序,可能在一个表中,并为每个请求提供一个唯一的顺序,递增其计数器.这涉及将最后一个订单存储在SQL中,我想避免,但它也确保线程不会不必要地同时检查相同的订单

我还缺少其他任何想法吗?这甚至有意义吗?如果我需要澄清,请告诉我.


结果:

我最终做的是在我的表中添加一个LastCheckedForConfirmation列,其中包含已完成的订单,我添加了一个存储过程,使用GETDATE()更新单个未确认的行并踢出订单号,以便我的进程可以检查它.它尽可能多地旋转(假设进程愿意运行的线程数),并使用存储过程为每个线程获取新的OrderNumber.

要处理"不要尝试行太多次或太旧时"的问题,我这样做了:如果"自上次尝试以来的时间">"创建和上次尝试之间的时间",SP将只返回一行,因此,每次再次尝试之前需要两倍的时间 - 首先等待5秒,然后是10秒,然后是20,40,80,120,然后在尝试15次(6小时)后,它会放弃该命令SP永远不会再回来了.

感谢大家的帮助 - 我知道我这样做的方式并不理想,我很欣赏你指点正确的方向.

sql-server queue multithreading

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

如何在SQL中合并来自多个表的数据


猜猜我处境很复杂.继承人现场.
我在SQL Server中有3个表.
报名,学生,课程.(仅供参考,没有外键)
表格列为
Student - StudentId,StudentName
Course - CourseId,CourseName
Enrollment - EnrollmentId,StudentId,CourseId,CourseResult

样本数据
学生 - s1,Sid
课程 - c1,科学
入学 - 1,s1,c1,80

我想要一个SQL查询,选择如下所示的数据

1,s1,Sid,c1,Science,80

我通过多次调用数据库在DAL层中做得很好.但是想在一次通话中和在DB中这样做.

任何人都可以救援!

sql sql-server join

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

存储SQL连接详细信息 - 如何安全地加密每个用户?

我有一个应用程序连接到许多SQL Server进行监视和其他任务.目前,我只支持受信任的身份验证,因为我不需要存储任何敏感的内容.我想添加使用SQL身份验证(用户名/密码)的功能.

在会话之间存储这些敏感数据的最佳方法是什么?是否有我可以使用的用户专用证书或加密密钥?是否足够安全使用每个用户随机生成的注册表项来加密此信息?如果有一种方法我可以使用一个键(或创建一个并存储它),使计算机上没有其他用户可以访问它,这是理想的.

我理解加密,所以我不是在寻找一个教程 - 我正在寻找最安全的方法来保护我的应用程序的一个用户的配置数据免受其他用户的影响.

.net encryption configuration

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

.NET文件流写入方法写入所有空行

我有一个C#控制台应用程序通过网络访问文件并写入它.我注意到有些文件已损坏并且只写入null.我没有得到任何例外.我使用简单的代码将字节数组写入文件的流.在二进制模式下打开文件时,我看到的都是零,类似于"0:00 00 00 00 10:00 00 00 00".

有谁知道为什么会发生这样的事情?可能存在网络故障,但网络故障应该抛出一些IO异常吗?

如果有人对此有任何想法,请告诉我.

代码示例:

FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.Open (FileMode.Create, FileAccess.Write, FileShare.None))
{
   fs.Write(byteData, 0, byteData.Length);
}
Run Code Online (Sandbox Code Playgroud)

.net c# filestream

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

查看SQL Server数据库对象列表时如何识别系统对象?

我正在尝试列出我服务器上所有数据库中的所有存储过程,而我似乎无法可靠地过滤掉系统对象.我用的是:

SELECT *
  FROM sysobjects
 WHERE id > 100
Run Code Online (Sandbox Code Playgroud)

这似乎在除MSDB之外的每个数据库中都能正常工作,MSDB充满了大量具有正常ID的存储过程,但它们是系统存储的过程.据我所知,我无法使用sysobjects表中的任何值过滤掉系统存储过程 - 其他人是否知道可用于过滤的值?

它们都标记为type ="P",这意味着它是一个存储过程,但似乎没有标志来指定它是系统存储过程还是用户存储过程.我可以使用sys.objects视图并过滤"IsMsShipped = 0",但我想要的东西也适用于SQL 2000,所以如果可能的话,我更喜欢使用较旧的视图(如sysobjects).

sql-server sql-server-2008 database-schema

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

完全取消办理登机手续

我不是在寻找回滚 - 我知道它是如何工作的.

TFS是否支持完全销毁办理登机手续?说我不小心检查了我的整个MP3库到存储库(ala Eric Sink的例子) - 我知道我可以从存储库中删除这些,或者如果我进行更改,我可以回滚(恢复以前的版本),但我可以实际上完全取消了办理登机手续的证据?

我知道我不应该这样做 - 我对为什么这是一个坏主意的原因不感兴趣 - 但只是TFS支持它.

version-control tfs

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

帮我重构这个查询的怪物

这是一个巨大的怪物,它进入SP所以变量是可用的:

SELECT OwnerName, SUM(AmountPaid) AS Paid, SUM(AmountOwedComplete) AS Owed, SUM(AmountOwedThisMonth) AS OwedMonth,
    SUM(PaidForPast) AS PaidPast, SUM(PaidForPresent) AS PaidPresent, SUM((AmountPaid - PaidForPast - PaidForPresent)) AS PaidFuture, [Description] FROM (
    SELECT OwnerName, AmountPaid, AmountOwedComplete, AmountOwedThisMonth, PaidForPast, [Description],
        (SELECT CASE WHEN (AmountPaid - PaidForPast) < ABS(AmountOwedThisMonth) THEN AmountPaid - PaidForPast
            ELSE ABS(AmountOwedThisMonth) END) AS PaidForPresent
    FROM (
        SELECT OwnerName, AmountPaid, AmountOwedTotal - AmountPaid AS AmountOwedComplete,
            AmountOwedThisMonth, 
            (SELECT CASE WHEN (AmountPaid < ABS((AmountOwedTotal - AmountPaid)) + AmountOwedThisMonth)
                THEN AmountPaid ELSE ABS((AmountOwedTotal - AmountPaid)) + …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

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

为什么我的SQL Server群集每分钟都执行"SELECT @@ SERVERNAME"?

当我在SQL Server集群上运行Profiler跟踪时,我注意到它每分钟都执行"SELECT @@ SERVERNAME".我总是认为故障转移群集服务对它做了一些事情,或者只是用它来确认网络名称和IP组合是否设置正确.这种情况不会在我的非群集实例上每分钟发生一次,只会发生在故障转移群集中.

更让人感到好奇的是,我使用sp_dropserver/sp_addserver覆盖了集群实例的名称,并且根本没有任何不良影响 - 即使集群实例名称与预期的网络/实例组合不匹配,两者都是集群经理和SQL Server看起来完全没问题.

这只是双重问题 - 为什么不断查询它,如果你不打算对它做任何事情?谁能在这里对管道有所了解?

sql-server cluster-computing failovercluster windows-server-2008

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