当前位置: 首页 > 编程语言 > C#

可空GUID共享

时间:2023-04-11 11:52:36 C#

可空GUID在我的数据库中,在其中一个表中,我有一个包含允许空值的GUID列。我有一个带有Guid的方法?用于将新数据行插入表中的参数。但是,当我说myNewRow.myGuidColumn=myGuid时,出现以下错误:“无法隐式转换类型‘System.Guid?’到'System.Guid'。”处理可空值类型时的ADO.NETAPI存在一些问题(即无法正常工作)。我们已经完成了它的问题,因此得出结论,最好手动将值设置为null,例如myNewRow.myGuidColumn=myGuid==null?(object)DBNull.Value:myGuid.Value这是ADO.NET应该做的痛苦的额外工作来处理,但它似乎并不可靠(即使在3.5SP1中)。这至少工作正常。我们还看到了将可空值类型传递给SqlParameters的问题,其中生成的SQL包含关键字DEFAULT而不是NULL值,因此我建议在构建参数时采用相同的方法。好的;myGuidColumn是如何定义的,myGuid是如何定义的?如果myGuid是Guid?并且myGuidColumn是Guid,则错误是正确的:您将需要使用myGuid.Value或(Guid)myGuid来获取值(如果它为null将抛出),或者如果null则myGuid.GetValueOrDefault()返回零guid.如果myGuid是一个Guid而myGuidColumn是一个Guid?那么它应该工作。如果myGuidColumn是对象,则可能需要DBNull.Value而不是常规null。当然,如果该列真的可以为空,您可能只想确保它是一个Guid?在C#代码中;-p与GregBeech的回答相同myNewRow.myGuidColumn=(object)myGuid??DBNull.Value您必须传递null对于可为空的Guid,这适用于可为空的Guid:myRecord.myGuidCol=(myGuid==null)?(Guid?)null:myGuid.Value如果你想在你的UsenullableGUIDsinyourc#code中避免这种情况,请尝试使用System.Guid.Empty将其设置为null(就个人而言,我经常发现使用可空类型很麻烦),某处您可以尽早将Guid.Empty分配给数据库中为空的.NET数据。这样,您就不必费心处理所有.HasValue内容,只需检查myGuid!=Guid.Empty。或者:internalstaticTCastTo(objectvalue){returnvalue!=DBNull.Value?(T)值:默认值(T);}您可以使用辅助方法:publicstaticclassAdo{publicstaticvoidSetParameterValue(IDataParameterparameter,T?value)whereT:struct{if(null==value){parameter.Value=DBNull.Value;}else{parameter.Value=value.Value;}}publicstaticvoidSetParameterValue(IDataParameterparameter,stringvalue){if(null==value){parameter.Value=DBNull.Value;}else{parameter.Value=value;}}}如果您正在使用扩展方法……//////如果不为null或Guid.Empty,则返回可为空的Guid(Guid?)值,否则返回DBNull.Value///publicstaticobjectGetValueOrDBNull(thisGuid?aGuid){返回(!aGuid.IsNullOrEmpty())?(object)aGuid:DBNull.Value;}//////确定可为空的Guid(Guid?)是否为null或Guid.Empty///publicstaticboolIsNullOrEmpty(thisGuid?aGuid){return(!aGuid.HasValue||aGuid.Value==Guid。空的);}然后你可以说:myNewRow.myGuidColumn=myGuid.GetValueOrDBNull();注意:这会在myGuid==Guid.Empty时插入null,如果你想在列中允许空Guids,你可以很容易地调整方法以上是C#学习教程:是空GUID共享的所有内容,如果它对大家有用,需要了解更多C#学习教程,希望大家多多关注——攻略?_field=空;if(myValue!="")//测试myValue是否有值{_field=Guid.Parse(myValue)}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: