如何将DBNULL转换为双精度?
即时获取数据库中的值。它出现了一个错误,提示“从DBNULL到Double的转换无效”。任何人,请帮助我?如何将DBNULL转换为双精度?
公共职能共有()为双 昏暗总为双
Dim strConn As String
strConn = ConfigurationManager.ConnectionStrings("***").ToString
Dim conn As New SqlConnection(strConn)
Dim strSql As String
strSql = "SELECT SUM (p.Price * c.Quantity) as 'Total' " & _
"FROM CartItem sci INNER JOIN Product p ON c.ProductID=p.ProductID " & _
"WHERE [email protected] "
Dim cmd As New SqlCommand(strSql, conn)
cmd.Parameters.AddWithValue("@CartID", CartID)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet
conn.Open()
da.Fill(ds, "CartItem")
conn.Close()
If (ds.Tables("CartItem").Rows.Count) <> 0 Then
**Total = ds.Tables("ShopCartItem").Rows(0)("Total")**
Else
Total = 0.0
End If
Return Total
End Function
试着改变你的SQL语句:
SELECT SUM (ISNULL(p.Price,0) * ISNULL(c.Quantity,0)) as 'Total' " & _
"FROM CartItem sci INNER JOIN Product p ON c.ProductID=p.ProductID " & _
"WHERE [email protected]
您还可以设置你的数据库表不允许为空
Nopes,它不起作用。不管怎么说,还是要谢谢你。 :) – user576785 2011-01-22 00:00:31
如果值可能为空,则返回类型需要为双倍? (可空双精度)。
正是如此。 NULL是缺少的值。从概念上讲,这是一种超出该类型所有可能值的范畴之外的价值。修复投票。 – 2011-01-21 23:36:03
在设置之前,您需要检查 ds.Tables("ShopCartItem").Rows(0))("Total") = DbNull.Value
。
If (ds.Tables("CartItem").Rows.Count) <> 0 Then
If ds.Tables("ShopCartItem").Rows(0))("Total") = DbNull.Value
Total = 0.0
else
Total = ds.Tables("ShopCartItem").Rows(0)("Total")**
Else
Total = 0.0
End If
有效的Orites!非常感谢!!!!!!!!!!!!我非常感谢。百万感谢你! :)))))))) – user576785 2011-01-22 00:13:41
你可以改为使用Nullable(双)作为你的VB数据类型?
您必须检查是否Nullable(of Double)
。 HasValue。 总= 0.0
If (ds.Tables("CartItem").Rows.Count) <> 0 Then
Dim sciValue As Nullable(Of Double) = DirectCast(ds.Tables("ShopCartItem").Rows(0)("Total"), Nullable(Of Double))
If sciValue.HasValue Then
Total = sciValue.Value
End If
End If
你不能施放的DBNull到两倍。你可以,但是,它将它转换为可以为空的双(c#double?)。
我写了一堆DataRow扩展方法(C#),对此有很多帮助。使语法更加整齐。用法很简单。 A C#示例:
public class Hormone
{
public int ID { get ; private set ; }
public HormoneLuType Type { get ; private set ; }
public int AgeStarted { get ; private set ; }
public int AgeStopped { get ; private set ; }
public int DurationInMonths { get ; private set ; }
public bool IsCurrentlyUsing { get ; private set ; }
public DateTime? DateLastEdited { get ; private set ; }
public string Name { get { return Type.ToString() } }
public Hormone(DataRow dr)
{
this.ID = dr.CastAsInt( "ihormoneid") ;
this.Type = new HormoneLuType(dr.CastAsIntNullable( "ihormluid" ) ?? 0) ;
this.AgeStarted = (int) dr.CastAsDecimal( "nstartage" ) ;
this.AgeStopped = (int) dr.CastAsDecimal( "nendage" ) ;
this.DurationInMonths = (int) dr.CastAsDecimal( "nduration" ) ;
this.IsCurrentlyUsing = dr.CastAsBool( "lusingnow" ) ;
this.DateLastEdited = dr.CastAsDateTimeNullable("tedit" ) ;
return ;
}
}
这里的扩展类:
using System;
using System.Data;
namespace DataAccess.Utils
{
public static class DataRowExtensions
{
#region downcast to DateTime
public static DateTime CastAsDateTime(this DataRow row , int index)
{
return toDateTime(row[index]) ;
}
public static DateTime CastAsDateTime(this DataRow row , string columnName)
{
return toDateTime(row[columnName]) ;
}
public static DateTime? CastAsDateTimeNullable(this DataRow row , int index)
{
return toDateTimeNullable(row[index]);
}
public static DateTime? CastAsDateTimeNullable(this DataRow row , string columnName)
{
return toDateTimeNullable(row[columnName]) ;
}
#region conversion helpers
private static DateTime toDateTime(object o)
{
DateTime value = (DateTime)o;
return value;
}
private static DateTime? toDateTimeNullable(object o)
{
bool hasValue = !(o is DBNull);
DateTime? value = (hasValue ? (DateTime?) o : (DateTime?) null) ;
return value;
}
#endregion
#endregion downcast to DateTime
#region downcast to byte[]
public static byte[] CastAsByteArray(this DataRow row , int index)
{
return toByteArray(row[index]);
}
public static byte[] CastAsByteArray(this DataRow row , string columnName)
{
return toByteArray(row[columnName]);
}
#region conversion helpers
private static byte[] toByteArray(object o)
{
bool hasValue = !(o is DBNull);
byte[] value = (hasValue ? (byte[]) o : (byte[]) null) ;
return value;
}
#endregion
#endregion downcast to Byte[]
#region downcast to int
public static int CastAsInt(this DataRow row , int index)
{
return toInt(row[index]) ;
}
public static int CastAsInt(this DataRow row , string columnName)
{
return toInt(row[columnName]) ;
}
public static int? CastAsIntNullable(this DataRow row , int index)
{
return toIntNullable(row[index]);
}
public static int? CastAsIntNullable(this DataRow row , string columnName)
{
return toIntNullable(row[columnName]) ;
}
#region conversion helpers
private static int toInt(object o)
{
int value = (int)o;
return value;
}
private static int? toIntNullable(object o)
{
bool hasValue = !(o is DBNull);
int? value = (hasValue ? (int?) o : (int?) null) ;
return value;
}
#endregion
#endregion downcast to int
#region downcast to int
public static decimal CastAsDecimal(this DataRow row , int index)
{
return toDecimal(row[index]) ;
}
public static decimal CastAsDecimal(this DataRow row , string columnName)
{
return toDecimal(row[columnName]) ;
}
public static decimal? CastAsDecimalNullable(this DataRow row , int index)
{
return toDecimalNullable(row[index]);
}
public static decimal? CastAsDecimalNullable(this DataRow row , string columnName)
{
return toDecimalNullable(row[columnName]) ;
}
#region conversion helpers
private static decimal toDecimal(object o)
{
decimal value = (decimal)o;
return value;
}
private static decimal? toDecimalNullable(object o)
{
bool hasValue = !(o is DBNull);
decimal? value = (hasValue ? (decimal?) o : (decimal?) null) ;
return value;
}
#endregion
#endregion downcast to int
#region downcast to bool
public static bool CastAsBool(this DataRow row , int index)
{
return toBool(row[index]) ;
}
public static bool CastAsBool(this DataRow row , string columnName)
{
return toBool(row[columnName]) ;
}
public static bool? CastAsBoolNullable(this DataRow row , int index)
{
return toBoolNullable(row[index]);
}
public static bool? CastAsBoolNullable(this DataRow row , string columnName)
{
return toBoolNullable(row[columnName]) ;
}
#region conversion helpers
private static bool toBool(object o)
{
bool value = (bool)o;
return value;
}
private static bool? toBoolNullable(object o)
{
bool hasValue = !(o is DBNull);
bool? value = (hasValue ? (bool?) o : (bool?) null) ;
return value;
}
#endregion
#endregion downcast to bool
#region downcast to string
public static string CastAsString(this DataRow row , int index)
{
return toString(row[index]);
}
public static string CastAsString(this DataRow row , string columnName)
{
return toString(row[columnName]);
}
#region conversion helpers
private static string toString(object o)
{
bool hasValue = !(o is DBNull);
string value = (hasValue ? (string) o : (string) null) ;
return value;
}
#endregion
#endregion downcast to string
}
}
希望这有助于!
+1倾倒一吨非常有用的扩展方法! – 2012-05-11 14:16:48
相似问题:http://stackoverflow.com/questions/222834/handling-dbnull-data-in-vb-net,你只需要测试DbNull – 2011-01-21 23:12:04