似乎三元运算符中存在某种类型的混淆.我知道这已经在其他SO线程中得到了解决,但它始终是无效的.另外,对于我的情况,我真的只是在寻找更好的方法.
我希望能够使用
proc.Parameters[PARAM_ID].Value =
string.IsNullOrEmpty(dest.Id) ? DBNull.Value : dest.Id;
Run Code Online (Sandbox Code Playgroud)
但相反,我坚持这个:
if (string.IsNullOrEmpty(dest.Id))
{
proc.Parameters[PARAM_ID].Value = DBNull.Value;
}
else
{
proc.Parameters[PARAM_ID].Value = dest.Id;
}
Run Code Online (Sandbox Code Playgroud)
三元运算符失败是因为DBNull和字符串之间没有可能的转换,并且看起来很傻,因为值似乎是对象,编译器将它踢回给我,我不得不关心.这个问题的可空版本的答案是将null转换为字符串并完成它; 但是DBNull不能转换成字符串,所以没有运气.
有没有更简洁的方法来做到这一点(顺便说一下,没有使用nullables?)
谢谢!
我需要一些关于如何处理以下内容的建议: - 我有一个数据字段misc_text_2,其类型为varchar(25)并允许NULL.现在,如果我使用以下语法
<asp:Label ID="lblPrinter" runat="server" Text='<%# iif(eval("misc_text_2") is dbnull.value, "", iif(eval("misc_text_2") like "NA", "None", iif(eval("misc_text_2") like "KP1", "Kitchen Printer 1", iif(eval("misc_text_2") like "KP2", "Kitchen Printer 2", iif(eval("misc_text_2") like "KP3", "Kitchen Printer 3", iif(eval("misc_text_2") like "BP1", "Bar Printer 1", iif(eval("misc_text_2") like "BP2", "Bar Printer 2", iif(eval("misc_text_2") like "BP3", "Bar Printer 3", Eval("misc_text_2")))))))))%>'></asp:Label>
Run Code Online (Sandbox Code Playgroud)
我一直在收到错误异常详细信息:System.InvalidCastException:从类型'DBNull'到类型'String'的转换无效.
我知道我错过了什么,但是......
提前致谢
如何在Entity Framework中将字段设置为DBNull?字段是强类型的,因此您不能将它设置为等于DBNull.Value,我没有找到任何方法将字段设置为DBNull.看起来这是必要的事情,但经过大量的谷歌研究后,我一无所获.
我正在尝试使用vb.net在Entity Framework中设置datetime字段.这需要我写
myEntity.mydate = Nothing
Run Code Online (Sandbox Code Playgroud)
这不会将该字段设置为null,而是将其设置为默认日期值,该值不是SQL Server中的有效日期值.
我在我的.NET应用程序中创建了一个强类型数据集(MyDataSet).为简单起见,我们假设它有一个DataTable(MyDataTable),一列(MyCol).MyCol的DataType属性设置为"System.Int32",其AllowDBNull属性设置为"true".
我想手动创建一个新行,并将其添加到此数据集中.我创建了没有问题的行,例如:
MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow();
Run Code Online (Sandbox Code Playgroud)
精细.但是,当我尝试将值设置为DBNull时:
myRow.MyCol = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
我被告知我不能这样做......它无法将其转换为int.从某种意义上说,这是有道理的,因为我已经将它定义为一个int ...但是我怎么能在那里获得DBNull呢?我不应该在那里有DBNull吗?这不是AllowDBNull属性的用途吗?
我显然错过了一些有趣的东西.有人可以帮忙解释它是什么吗?
编辑:我也试过输入"int?" 作为DataType,但是当我输入它时,Visual Studio会抛出一个错误,说"Column需要一个有效的DataType".
我已将Class Person属性Birthday定义为可为空的DateTime?,那么为什么空融合运算符不应该在以下示例中起作用?
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
我得到的编译器错误是"操作员'??' 不能应用于'System.DateTime?'类型的操作数 和'System.DBNull'"
以下也出现了编译错误:
cmd.Parameters.Add(new SqlParameter("@Birthday",
SqlDbType.SmallDateTime)).Value =
(person.Birthday == null) ? person.Birthday:DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
我按照Refactor的建议添加了一个强制转换为(对象),然后编译,但是没有正常工作,并且在两种情况下,值都存储在sqlserver db中为null.
SqlDbType.SmallDateTime)).Value =
person.Birthday ?? (object)DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
有人能解释一下这里发生了什么吗?
我需要使用以下笨拙的代码:
if (person.Birthday == null)
cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value
= DBNull.Value;
else cmd.Parameters.Add("@Birthday", SqlDbType.SmallDateTime).Value =
person.Birthday;
Run Code Online (Sandbox Code Playgroud) 我已经在SO上看过很多很多这样的版本,但是它们似乎都不能满足我的需求.
我的数据来自供应商数据库,该数据库允许DateTime字段为null.首先,我将数据拉入DataTable.
using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
Run Code Online (Sandbox Code Playgroud)
我正在将DataTable转换为List <>进行处理.
var equipment = from i in dt.AsEnumerable()
select new Equipment()
{
Id = i.Field<string>("ID"),
BeginDate = i.Field<DateTime>("BeginDate"),
EndDate = i.Field<DateTime>("EndDate"),
EstimatedLife = i.Field<double>("EstimatedLife")
}
Run Code Online (Sandbox Code Playgroud)
那么,在这个实例中如何检查DBNull?我试着写一个方法.
public DateTime CheckDBNull(object dateTime)
{
if (dateTime == DBNull.Value)
return DateTime.MinValue;
else
return (DateTime)dateTime;
}
Run Code Online (Sandbox Code Playgroud) 我有这个参数:
$objDbCmd.Parameters.Add("@telephone", [System.Data.SqlDbType]::VarChar, 18) | Out-Null;
$objDbCmd.Parameters["@telephone"].Value = $objUser.Telephone;
Run Code Online (Sandbox Code Playgroud)
字符串$objUser.Telephone可以为空.如果它是空的,我怎么能把它转换成[DBNull]::Value?
我试过了:
if ([string]:IsNullOrEmpty($objUser.Telephone)) { $objUser.Telephone = [DBNull]::Value };
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:
使用"0"参数调用"ExecuteNonQuery"的异常:"无法将参数值从ResultPropertyValueCollection转换为String."
如果我将它转换为字符串,它会插入一个空字符串"",而不是DBNull.
如何实现这一目标?
谢谢.
我有以下代码行
if (DBNull.Value.Equals(o) || o != null)
Run Code Online (Sandbox Code Playgroud)
这里o是object o in row.ItemArray 我不断收到的错误- >
Xml type "List of xdt:untypedAtomic" does not support a conversion from Clr type "DBNull" to Clr type "String".
我不明白的是,当我单步执行我的代码时,if应该抓住这个并执行我的替代操作,但事实并非如此?
有人可以为我解释一下.
谢谢!
我有一个包含空值的表,我需要使用SqlDataReader从表中获取数据.我无法弄清楚如何安全地将DBNull强制转换为int.
我现在正以这种方式做到这一点:
...
reader = command.ExecuteReader();
while (reader.Read()) {
int y = (reader["PublicationYear"] != null) ? Convert.ToInt32(reader["PublicationYear"]) : 0;
...
}
...
Run Code Online (Sandbox Code Playgroud)
但是Object cannot be cast from DBNull to other types.当PublicationYear为null时获取.
我怎样才能安全地获得价值?
谢谢.
我很好奇使用if(some_value is DBNull)对比的利弊是什么if(DBNull.Value.Equals(some_value)).我个人更喜欢if(some_value is DBNull)因为我发现它更具可读性.我知道微软建议使用if(DBNull.Value.Equals(some_value))根据https://msdn.microsoft.com/en-us/library/system.dbnull%28v=vs.110%29.aspx.