NULL当我明确过滤掉Where子句中的那些行时,为什么以下查询会为具有桶值的行引发下面的错误?
Dim query = From row As dbDataSet.conformalRow In dbDataSet.Tables("conformal") _
Where Not IsDBNull(row.Cal) AndAlso tiCal_drop.Text = row.Cal _
AndAlso Not IsDBNull(row.Tran) AndAlso tiTrans_drop.Text = row.Tran _
AndAlso Not IsDBNull(row.barrel) _
Select row.barrel
If query.Count() > 0 Then tiBarrel_txt.Text = query(0)
Run Code Online (Sandbox Code Playgroud)
Run-time exception thrown : System.Data.StrongTypingException - The value for column 'barrel' in table 'conformal' is DBNull.
如何重写我的查询/条件以按照我的意图工作?
我使用OleDB来读取Excel文件.其中一列具有"通用"格式,并且包含字母和值仅由数字组成的字符串.检索字符串值没有问题,但检索纯数值DBNull.
怎么解决?
我使用以下连接字符串打开Excel 2003文件(xls):
"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=C:\\file.xls;
Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
Run Code Online (Sandbox Code Playgroud) 如果textBox字段为空,我想将SQL Server 2008数据库表中的所有行返回到SQL数据源.所以我用一个if @date IS NULL子句创建了一个存储过程.
虽然存储过程似乎在Visual Studio 2008中正常工作,但实际网页没有显示任何结果.
我猜我必须向DBNull存储过程发送一个值if if textBox.Text == string.Empty.我试过了,SqlDataSource1.SelectParameters.Add但似乎我得到转换错误DBNull.Value到字符串.
这是我的问题的根源还是我错过了其他的东西?DBNull.Value如果文本字段为空,我将如何传递到存储过程?
我知道SQL标准允许列中的多个NULL值是UNIQUE约束的一部分.
我不明白为什么UNION构造(至少在PostgreSQL中)将NULL值视为相同.例如:
$ select * from tmp_a;
a | b
---+---
a | b
a |
|
(3 rows)
$ select * from tmp_b;
a | b
---+---
a | c
a |
|
(3 rows)
$ select a, b from tmp_a union select a, b from tmp_b order by 1, 2;
a | b
---+---
a | b
a | c
a |
|
(4 rows)
Run Code Online (Sandbox Code Playgroud) 虽然这个问题可能看起来像是许多问题的重复,但实际上却被问到了一个具体的原因.拿这个代码,例如:
Dim n As Integer? = If(True, Nothing, 1)
Run Code Online (Sandbox Code Playgroud)
在那个代码中,三元表达式应该返回Nothing,但是它将n设置为0.如果这是C#,我可以说它default(int?)会完美地工作.现在看起来我将不得不抛弃三元并使用常规的If块,但我真的想使用三元组.
如果没有什么是真正的VB.NET等同于C#的默认值,你怎么能解释这种行为?
今天我和一位同事进行了这次有趣的讨论.我们在C#中讨论两段代码.
代码片段1:
if(!reader.IsDBNull(2))
{
long? variable1 = reader.GetInt64(2)
}
Run Code Online (Sandbox Code Playgroud)
代码片段2:
long variable1 = reader.IsDBNull(2) ? (long?) null : reader.GetInt64(2)
Run Code Online (Sandbox Code Playgroud)
问题是:将null转换为可空的long是一个好习惯吗?或者你宁愿使用传统的if语句来避免强制转换null为可空的长.
在这个例子中,产生一个错误,如果任一row.FirstName或row.LastName是NULL.
如何重写该Select子句,将DBNull值转换为空字符串""?
Dim query = From row As myDataSet.myDataRow in myDataSet.Tables("MyData") _
Select row.FirstName, row.LastName
Run Code Online (Sandbox Code Playgroud)
注意:由于DataSet是强类型的.我可以使用row.isFirstNameNull(),但IIF(row.isFirstNameNull(), "", row.FirstName)由于引用了所有参数,因此无法工作.
我正在寻找一些我正在研究的.net程序的代码.该程序的前一位作者在一年多前向我提供了代码.突然间,我看到一个我没有触及的代码抛出的异常:
if ((string)row["LevelName"] != "ABC")
Run Code Online (Sandbox Code Playgroud)
例外情况是"无法将类型为'System.DBNull'的对象强制转换为'System.String'.
我认为该字符串是一个可以为空的数据类型,所以我怎么可能得到这个异常?
我有以下代码执行查询并返回结果.但是,我环顾四周并找到一些例子来处理空值,但是我收到一个错误:"当没有数据存在时无效的读取尝试." 我也得到了错误:"从类型'DBNull'转换为'Decimal'类型无效."
有人可以帮我解决这个代码,以防止空值崩溃我的程序?
Private Sub EFFICIENCY_STACKRANK_YTD(ByVal EMPLOYEE As String)
Dim queryString As String = "SELECT " & _
" (SELECT CAST(SUM(TARGET_SECONDS) AS DECIMAL)/ CAST(SUM(ROUTE_SECONDS) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN WITH(NOLOCK) WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND EMPLOYEE_NAME = '" & EMPLOYEE & "' AND YEAR_TIME = '" & cbYear.Text & "' AND ACTIVE = 1) AS RESULT1" & _
" FROM dbo.APE_BUSDRIVER_MAIN "
Using connection As New SqlConnection(SQLConnectionStr)
Dim command As New SqlCommand(queryString, connection)
connection.Open()
Dim reader As …Run Code Online (Sandbox Code Playgroud) 命令的存储过程可以返回null.是否正确检查返回值是否为null或者是否还要检查obj是否为null?
object obj = command.ExecuteScalar();
int id = -1;
if (DBNull.Value == obj)
{
id = Convert.ToInt32(obj );
}
Run Code Online (Sandbox Code Playgroud)