我可以DBnull使用任何方法检查数据行.
通过使用
if(dr[0][0]==DBNull.Value)
//do somethin
Run Code Online (Sandbox Code Playgroud)
或通过做
if(dr[0][0].ToString().IsNullOrEmpty())
//do something
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都会得到相同的结果.
但是哪一个是直接正确的方法.哪个将使用更少的资源
我有以下C#代码:
sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value);
Run Code Online (Sandbox Code Playgroud)
但它抛出以下编译错误:
运算符
??不能应用于类型string和的操作数System.DBNull
为什么编译器不允许这种语法?
我收到了这个问题
从类型"DBNull"到"String"类型的转换无效.
第501行:hfSupEmail.Value = dt.Rows(0)("SupEmail")
我对此非常陌生,我不确定有人会指导我的确切问题是什么?
非常感谢
如何NULL在空旷地区检查价值MySqlDataReader?
以下不起作用; 它始终击中else:
if (rdr.GetString("timeOut") == null)
{
queryResult.Egresstime = "Logged in";
}
else
{
queryResult.Egresstime = rdr.GetString("timeOut");
}
Run Code Online (Sandbox Code Playgroud)
rdr.IsDbNull(int i) 只接受列号,而不是名称.
如果VB.NET我有DataRow,我想测试列值是否Null,我应该使用:
myDataRow.IsNull("Column1")
Run Code Online (Sandbox Code Playgroud)
要么
IsDBNull(myDataRow("Column1"))
Run Code Online (Sandbox Code Playgroud) 使用c#方法DataRow.IsNull确定空值是否超过检查行是否等于DbNull.value有什么好处?
if(ds.Tables[0].Rows[0].IsNull("ROWNAME")) {do stuff}
Run Code Online (Sandbox Code Playgroud)
VS
if(ds.Tables[0].Rows[0]["ROWNAME"] == DbNull.value) {do stuff}
Run Code Online (Sandbox Code Playgroud) 当我尝试将DBNull.Value插入可空的 varbinary(max)字段时,我得到此异常:
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query.
Run Code Online (Sandbox Code Playgroud)
那是我的代码:
insertCMD.Parameters.AddWithValue("@ErrorScreenshot", SqlDbType.VarBinary).Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
我知道在SO上存在重复的问题,但我不像其他人那样使用任何字符串.
我错了什么?
更新:
using (var insertCMD = new SqlCommand("INSERT INTO TestplanTeststep (TeststepId,TestplanId,CreatedAt,ErrorText,ErrorScreenshot,TestState) VALUES (@TeststepId, @TestplanId,@CreatedAt,@ErrorText,@ErrorScreenshot,@TestState)", con))
{
var p1 = insertCMD.Parameters.Add("@TeststepId", SqlDbType.Int);
var p2 = insertCMD.Parameters.Add("@CreatedAt", SqlDbType.DateTime);
insertCMD.Parameters.AddWithValue("@TestplanId", testplan.Id);
insertCMD.Parameters.AddWithValue("@ErrorText", (object) DBNull.Value);
insertCMD.Parameters.AddWithValue("@ErrorScreenshot", (object) DBNull.Value);
insertCMD.Parameters.AddWithValue("@TestState", (int)Teststep.TeststepTestState.Untested);
foreach (Teststep step in teststeps)
{
p1.Value = step.Id;
p2.Value = step.CreatedAt;
insertCMD.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud) 我们在这里使用自己的ORM,并为所有db表提供强类型包装器.我们还允许执行弱类型的临时SQL,但是这些查询仍然通过相同的类来从数据读取器中获取值.
在调整该类以使用Oracle时,我们遇到了一个有趣的问题.使用DBNull.Value或null是否更好?使用DBNull.Value有什么好处吗?使用null似乎更"正确",因为我们已经将自己从数据库世界中分离出来了,但是有一些含义(ToString()例如,当一个值为null时,你不能盲目地这样做)所以它肯定是我们需要有意识的东西决定.
(LocalVariable)ABC.string(Name)=(Idatareader)datareader.GetString(0);
这个名称值来自数据库..这里发生的是这个名称值是否为null而读取它时抛出异常?
我在这里手动做一些条件.我不想写一个手动条件来检查我的所有变量..
我现在正在做这样的事情..
string abc = (Idatareader)datareader.GetValue(0);
if(abc = null)
//assiging null
else
assiging abc value
Run Code Online (Sandbox Code Playgroud)
是否可以为此编写扩展方法?谢谢
我想从数据库中检索十进制值,我想知道检查空值的推荐方法.
我在MSDN上看到过- DBNull.Value字段很少使用此检查.
因此,reader.IsDBNull检查空值是最好/最有效的方法吗?
我创建了2个示例方法:
public static decimal? GetNullableDecimal(SqlDataReader reader, string fieldName)
{
if (reader[fieldName] == DBNull.Value)
{
return null;
}
return (decimal)reader[fieldName];
}
public static decimal? GetNullableDecimal_2(SqlDataReader reader, string fieldName)
{
if (reader.IsDBNull(reader[fieldName]))
{
return null;
}
return (decimal)reader[fieldName];
}
Run Code Online (Sandbox Code Playgroud)
大多数情况下,字段将为空.
提前致谢!