有没有相当于
PRINT 'hello world'
Run Code Online (Sandbox Code Playgroud)
哪个可以从CLR(C#)代码调用?
我正在尝试在我的函数中输出一些调试信息.我无法运行VS调试器,因为这是一个远程服务器.
谢谢!
我有这个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++"删除"?
我已经搜索过,但我找不到足够明确的答案.
脚本在循环中执行以下步骤,假设两个步骤都需要很长时间才能完成:
$x = DoSomeWork;Start-Job -Name "Process $x" { DoSomeMoreWork $x; };当然,第1步阻止脚本,第2步没有.我可以通过控制台轻松监控循环的进度/状态和步骤1.
我还想做的是在批处理仍在执行时监视由步骤2启动的作业的作业状态.
通常,可以从另一个会话"附加"或查询另一个PowerShell会话吗?(假设监视会话不会产生工作者会话)
如果我们有一个巨大的事实表并且想要添加一个新维度,我们可以这样做:
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
基本上我试图在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,它只是"通用".
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) 我有以下功能:
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) 我正在为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 ×2
c# ×2
sql ×2
sql-server ×2
asp.net ×1
c++ ×1
debugging ×1
filestream ×1
foreign-keys ×1
gdi+ ×1
interop ×1
marshalling ×1
powershell ×1
sqlclr ×1
sqlcmd ×1
stdio ×1
trace ×1