小编Ser*_*uei的帖子

如何从SQL CLR函数打印消息?

有没有相当于

PRINT 'hello world'
Run Code Online (Sandbox Code Playgroud)

哪个可以从CLR(C#)代码调用?

我正在尝试在我的函数中输出一些调试信息.我无法运行VS调试器,因为这是一个远程服务器.

谢谢!

sql-server debugging trace sqlclr

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

我是否需要在非托管代码中删除通过Marshal.PtrToStructure封送的结构?

我有这个C++代码:

extern "C" __declspec(dllexport) VOID AllocateFoo(MY_DATA_STRUCTURE** foo)
{
    *foo = new MY_DATA_STRUCTURE;

    //do stuff to foo
}
Run Code Online (Sandbox Code Playgroud)

然后在C#中我调用函数:

[DllImport("MyDll.dll")]
static extern void AllocateFoo(out IntPtr pMyDataStruct);

...

MyDataStructure GetMyDataStructure()
{
    IntPtr pData;
    ManagedAllocateFooDelegate(out pData);

    MyDataStructure foo = (MyDataStructure)Marshal.PtrToStructure(pData, typeof(MyDataStructure));
    return foo;
}
Run Code Online (Sandbox Code Playgroud)

MyDataStructure是一个结构(非类),对应于MY_DATA_STRUCTURE,并且成员被适当地编组.

所以问题:当MyDataStructure是GC时,我是否需要存储pData然后在非托管代码中再次发布它?MSDN对Marshal.PtrToStructure(IntPtr,Type)说:"将数据从非托管内存块编组到指定类型的新分配托管对象." 在那句话中,"马歇尔"是指"复制"吗?在这种情况下,我需要保留(IntPtr pData),然后将其传递给非托管代码(在MyDataStructure析构函数中),这样我可以做一个C++"删除"?

我已经搜索过,但我找不到足够明确的答案.

.net c# interop marshalling

12
推荐指数
2
解决办法
4638
查看次数

从另一个PowerShell会话监视PowerShell会话中的作业

脚本在循环中执行以下步骤,假设两个步骤都需要很长时间才能完成:

  1. $x = DoSomeWork;
  2. Start-Job -Name "Process $x" { DoSomeMoreWork $x; };

当然,第1步阻止脚本,第2步没有.我可以通过控制台轻松监控循环的进度/状态和步骤1.

我还想做的是在批处理仍在执行时监视由步骤2启动的作业的作业状态.

通常,可以从另一个会话"附加"或查询另一个PowerShell会话吗?(假设监视会话不会产生工作者会话)

powershell powershell-2.0

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

检查外键约束"在线"

如果我们有一个巨大的事实表并且想要添加一个新维度,我们可以这样做:

BEGIN TRANSACTION

ALTER TABLE [GiantFactTable]
ADD NewDimValueId INT NOT NULL
CONSTRAINT [temp_DF_NewDimValueId] DEFAULT (-1)
WITH VALUES -- table is not actually rebuilt!

ALTER TABLE [GiantFactTable]
WITH NOCHECK
ADD CONSTRAINT [FK_GiantFactTable_NewDimValue]
FOREIGN KEY ([NewDimValueId])
REFERENCES [NewDimValue] ([Id])

-- drop the default constraint, new INSERTs will specify a value for NewDimValueId column
ALTER TABLE [GiantFactTable]
DROP CONSTRAINT [temp_DF_NewDimValueId]

COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)

注意:以上所有内容仅操纵表元数据,无论表大小如何都应该快速.然后我们可以运行一个工作来回填GiantFactTable.NewDimValueId小事务,这样就不会违反FK.(此时任何INSERT/UPDATE - 例如回填操作 - 都由FK验证,因为它已启用,但不是"可信")

在回填之后,我们知道数据是一致的,我的问题是SQL引擎如何变得开明?不使表离线.

此命令将使FK受信任,但它需要架构修改(Sch-M)锁定并且可能需要数小时(几天?)使表离线:

ALTER TABLE [GiantFactTable]
WITH CHECK CHECK CONSTRAINT [FK_GiantFactTable_NewDimValue]
Run Code Online (Sandbox Code Playgroud)

关于工作负载:表有几百个分区(固定数量),数据一次附加到一个分区(以循环方式),从不删除.还有一个恒定的读取工作负载,它使用群集密钥一次从一个分区获取(相对较小的)行范围.一次检查一个分区,使其脱机,是可以接受的.但我找不到任何语法来做到这一点.还有其他想法吗?

sql sql-server foreign-keys check-constraints sql-server-2012

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

无法将图像渲染到HttpContext.Response.OutputStream

基本上我试图在ASP.NET处理程序中呈现一个简单的图像:

public void ProcessRequest (HttpContext context)
{
    Bitmap image = new Bitmap(16, 16);
    Graphics graph = Graphics.FromImage(image);

    graph.FillEllipse(Brushes.Green, 0, 0, 16, 16);

    context.Response.ContentType = "image/png";
    image.Save(context.Response.OutputStream, ImageFormat.Png);
}
Run Code Online (Sandbox Code Playgroud)

但我得到以下异常:

System.Runtime.InteropServices.ExternalException: A generic error
occurred in GDI+.
    at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder,
    EncoderParameters encoderParams)
Run Code Online (Sandbox Code Playgroud)

解决方案是使用它而不是将图像写入OutputStream:

MemoryStream temp = new MemoryStream();
image.Save(temp, ImageFormat.Png);
byte[] buffer = temp.GetBuffer();
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)

所以我只是好奇为什么第一个变体有问题?

编辑:HRESULT是80004005,它只是"通用".

c# asp.net system.drawing gdi+

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

SQLCMD:r <path>其中path是变量

SQLCMD命令是否:r支持非常量文字路径?

例如:

setvar $(path1) '.\script.sql'
:r $(path1) -- SQL01260: A fatal parser error occurred: .
:r '$(path1)' -- SQL01260: A fatal parser error occurred: .
:r "$(path1)" -- SQL01260: A fatal parser error occurred: .
Run Code Online (Sandbox Code Playgroud)

sqlcmd

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

SQL 2005为什么说这个UDF是非确定性的?

我有以下功能:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO    
ALTER FUNCTION [dbo].[IP4toBIGINT](
    @ip4 varchar(15)
) 
RETURNS bigint
WITH SCHEMABINDING
AS
BEGIN
    -- oc3 oc2 oc1 oc0
    -- 255.255.255.255
    -- Declared as BIGINTs to avoid overflows when multiplying later on     DECLARE @oct0 bigint, @oct1 bigint, @oct2 bigint, @oct3 bigint;
    DECLARE @Result bigint;

    SET @oct3 = CAST(PARSENAME(@ip4, 4) as tinyint);
    SET @oct2 = CAST(PARSENAME(@ip4, 3) as tinyint);
    SET @oct1 = CAST(PARSENAME(@ip4, 2) as tinyint);
    SET @oct0 = CAST(PARSENAME(@ip4, 1) as tinyint);

    -- …
Run Code Online (Sandbox Code Playgroud)

sql deterministic user-defined-functions non-deterministic

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

如何获取受管System.IO.FileStream的基础stdio FILE*?

我正在为C/C++库编写.NET适配器,其中方法"bar"采用常规stdio FILE*.是否可以构建一个接口,以便托管代码用户可以传递托管(文件)流?那就是没有创建中间缓冲区和代码来管理数据.还假设bar()读取只会让事情变得更好吗?

// native code
void bar(FILE*);

// interface for managed code
void foo(System::IO::FileStream^ file)
{
    FILE* stdio_handle = ???;

    bar(stdio_handle);
}
Run Code Online (Sandbox Code Playgroud)

.net c++ stdio filestream

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