我使用类似下面的方法来模拟我的代码中的用户:
在另一个类中,我需要找出当前用户(如"mydomain\moose"),但我不知道我是否正在冒充其他用户.
如果我冒充某人,我如何获得用户名?
System.Environment.UserName和System.Security.Principal.WindowsIdentity.GetCurrent().Name都返回原始用户,而不是当前模拟的用户.
更多细节:
我正在进行此模拟,以便我可以访问用户通常无权访问的netowrk共享中的某些文件.
如果我使用登录类型的LOGON32_LOGON_INTERACTIVE,我确实看到了新用户,但我无法访问网络共享.如果我使用登录类型的LOGON32_LOGON_NEW_CREDENTIALS(值为9),我可以访问网络共享但我没有在Environment.UserName中看到新用户.
我需要更新符合条件的表中的前N行.
我知道我可以做一个更新前N ...但问题是N在@variable中.
更新顶部@N SET ...不起作用.
有没有办法做到这一点,我只是失踪?
这里没有特定的表定义,因为列是什么并不重要.如果我可以为一个列表执行此操作,我可以为我的表执行此操作.
我希望能够在svn中保留我们的CruiseControl.Net的ccnet.config文件,然后当我检查更改时,即我添加了一个新项目,它将自行更新.
这样我在源代码管理下有配置文件,我可以跟踪正在进行的更改.
我确实意识到我可以检查一个将CruiseControl搞砸到我必须进行一些手动干预的更改,但在一般情况下,这听起来很好用.
然而,这个循环似乎可能会造成黑洞并摧毁世界.如果可能的话,我想保持这种良心.
有什么想法吗?
我正在尝试编写UDF以将字符串或与该guid相关联的项目代码转换为guid:
CREATE FUNCTION fn_user_GetProjectID 
(
    @Project nvarchar(50)
)
RETURNS uniqueidentifier
AS
BEGIN
    declare @ProjectID uniqueidentifier
    BEGIN TRY
        set @ProjectID = cast(@Project as uniqueidentifier)
    END TRY
    BEGIN CATCH
        set @ProjectID = null
    END CATCH
    if(@ProjectID is null)
    BEGIN
        select  @ProjectID = ProjectID from Project where projectcode = @Project
    END
    return @ProjectID
END
如果上面的代码已嵌入到我的存储过程中,则可以正常工作,但是我想从中创建一个函数,以便我遵循DRY。
当我尝试创建函数时,出现如下错误:
Msg 443, Level 16, State 14, Procedure fn_user_GetProjectID, Line 16
Invalid use of side-effecting or time-dependent operator in 'BEGIN TRY' within a function.
有谁知道我如何解决这个错误?
编辑:我知道我不能在函数中使用Try-Catch,我想这是一个简化的问题,有没有一种方法可以进行转换,如果转换失败,它只会返回NULL而不是错误?