当插入guid作为主键时,db服务器是否会遍历每一行以确保没有重复,或者只是假设不可能或不太可能重复?
使用int,db服务器可以简单地增加密钥,但不能增加GUID的情况
我在Windows XP SP2平台上使用VC++ 6.0.我在我的代码中使用GUID结构.
typedef struct _GUID { // size is 16
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
Run Code Online (Sandbox Code Playgroud)
如何在创建对象时将此结构初始化为零?或者当我创建一个对象时,成员的默认值是多少?
是否可以使用手动定义的值创建GUIDS?
我需要提前知道GUID的值来进行一些单元测试.
我正在尝试生成一个常量值,我将使用如下:
public class Foo()
{
public const String ExtensionKey = Guid.NewGuid().ToString();
public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编译器抛出错误:
The expression being assigned to 'Foo.ExtensionKey' must be constant
我知道在编译时无法执行方法(构造函数或类型初始值设定项)。我正在寻找一种解决方法来将随机生成的 Guid 分配给ExtensionKey不同类的不同常量。
编辑:
目的是为每种类型生成一个唯一的 Guid。Guid 值对于所有对象实例和应用程序运行时都必须相同。这是行为,Const我正在寻找一种方式来尊重它。
我正在使用 Visual Studio 2010 的 C 程序。我需要创建 GUID,然后进行比较。
我在我的程序中包含“#include guiddef.h”。
以下是代码片段,但在编译代码时我不断收到错误消息。
//mainGUID is assign value in the program
GUID mainGUID;
//Function call which compares passed GUID with the mainGUID
int CheckGUID(GUID guid)
{
if(IsEqualGUID(guid,mainGUID))
return 1;
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Error 3 error C2172: 'memcmp' : actual parameter is not a pointer : parameter 1
Error 3 error C2172: 'memcmp' : actual parameter is not a pointer : parameter 2
Run Code Online (Sandbox Code Playgroud)
不知道发生了什么。
字典定义如下:
typedef boost::tuple<conn_ptr, handler_ptr, rdp_ptr> conn_tuple;
typedef std::map<GUID, conn_tuple> conn_map;
Run Code Online (Sandbox Code Playgroud)
我们遇到了编译错误:
错误9错误C2678:二进制'<':找不到运算符,它接受类型为'const GUID'的左手操作数(或者没有可接受的转换)c:\ program files(x86)\ microsoft visual studio 11.0\vc \包括\ xstddef
然后我们解决它:
struct GUIDComparer
{
bool operator()(const GUID & Left, const GUID & Right) const
{
// comparison logic goes here
if( (Left.Data1 == Right.Data1) && (Left.Data2 == Right.Data2) &&
(Left.Data3 == Right.Data3) && (memcmp(Left.Data4 , Right.Data4,sizeof(Right.Data4))==0) )
{
return true;
}
return false;
}
};
typedef boost::tuple<conn_ptr, handler_ptr, rdp_ptr> conn_tuple;
typedef std::map<GUID, conn_tuple, GUIDComparer> conn_map;
Run Code Online (Sandbox Code Playgroud)
现在,所有编译,但然后我们在运行时得到一个异常(无效的运算符<).
我不知道出了什么问题,如果有人可以提供帮助,我会很高兴
要么是我对 WiX 不了解,要么是历史上最大的巧合一再发生。
我有一个<Component/>元素。在这个组件中,我将 GUID 指定为星号..... 就像你做的那样。
<Component Id="Component_PowershellDLL"
Guid="*">
<File Source="$(var.MyProject.ProjectDir)System.Management.Automation.dll"/>
</Component>
Run Code Online (Sandbox Code Playgroud)
(我知道我应该使用 Nuget 来访问这个 DLL,但那是另一回事了......)
当我编译时,我收到此错误消息:
Component/@Id='Component_PowershellDLL' 有一个 @Guid 值'{guid-here}',它复制了这个包中的另一个组件。
组件中的DLL是在项目的其他地方使用,但它所处的地方是在“MyProject的”文件夹(因此,(var.MyProject.ProjectDir))。
我不会当我摆脱了明星的,只是放在一个普通的旧的Guid得到错误。
任何人都可以对此有所了解吗?我的印象是,当使用星号时,它只会生成一个新的 Guid。那么它生成的 Guid 怎么会出现在项目的其他地方呢?
我知道了。我确实将组件安装的 DLL 保留在同一解决方案中(MyProject在所示示例中)。
因此,是的,通过宏在组件中引用的 DLL 存在于 Visual Studio 解决方案中。
我想如果他们有不同的 GUID(位于另一个项目中的 DLL 和我放在安装所述 DLL 的组件中的 GUID),那么 Windows Installer 将有两个相同的 GUID......事情。
谢谢你们。你们是我进军 Windows Installer 世界的真正帮手。
@PhileDW 我把你的书放在我身边,但我还没有时间真正深入了解它。
我试图运行下面的 jQuery .on() 方法,参数值为 10 但是每当我这样做时,我都会得到一个
未捕获的类型错误
$(document).on("click", '.topic-btn', displayGIF(10));
Run Code Online (Sandbox Code Playgroud)
我的理解是它的编写方式运行该函数而不会导致错误的单击事件。
有没有解决的办法?最终,我希望.on("click"...参数值为10,.on("dblcick"...参数值为20。
我可以使用下面的方法将 Guid 字符串转换为 BigInteger。如何将 BigInteger 转换回 Guid 字符串。
using System;
using System.Numerics;
class Class1
{
public static BigInteger GuidStringToBigInt(string guidString)
{
Guid g = new Guid(guidString);
BigInteger bigInt = new BigInteger(g.ToByteArray());
return bigInt;
}
static void Main(string[] args)
{
string guid1 = "{90f0fb85-0f80-4466-9b8c-2025949e2079}";
Console.WriteLine(guid1);
Console.WriteLine(GuidStringToBigInt(guid1));
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud) guid ×10
c# ×3
.net ×1
biginteger ×1
boost ×1
c ×1
c++ ×1
com ×1
components ×1
constants ×1
javascript ×1
jquery ×1
object ×1
sql ×1
sql-server ×1
stdmap ×1
typeerror ×1
unit-testing ×1
visual-c++ ×1
wix ×1