即时通讯从数据库中获取价值。出现错误,提示“从DBNULL转换为Double无效。” 有人,请帮助我吗?
公共函数Total()为Double Dim Total为Double
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 c.CartID=@CartID "
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 …Run Code Online (Sandbox Code Playgroud) 我正在开发一个新的ASP.Net 4.0数据驱动的应用程序.在DAL中,我检查所有数据的NULL值,并在NULL时默认为正确的数据.我有一个奇怪的问题.两个日期回来了 - 一个我只需要时间.完整日期的第一行代码可以正常工作 - 但第二行代码错误指向格式字符串,但奇怪的是它在NULL值上出错,它不使用格式字符串而只返回Date.MinValue.当第二行获取数据时,它会正确格式化返回.
Dim dr As DataRow
.TourDate = IIf(dr.IsNull("tourdate"), Date.MinValue, Format(dr("tourdate"), "MM/dd/yyyy"))
.TourTime = IIf(dr.IsNull("tourtime"), Date.MinValue, Format(dr("tourtime"), "T"))
Run Code Online (Sandbox Code Playgroud)
当dr("tourtime")为NULL时,错误出现在第二行 - 错误是:参数'Expression'不是有效值.
我想了解哪种用法是正确的?
if(!string.IsNullOrEmpty(parentID))
cmd.Parameters.Add(new SqlParameter("@ParentSesID", parentID));
else
cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value));
Run Code Online (Sandbox Code Playgroud)
要么
if(!string.IsNullOrEmpty(parentID))
cmd.Parameters.Add(new SqlParameter("@ParentSesID", parentID));
else
cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value.ToString()));
Run Code Online (Sandbox Code Playgroud) 我有一个aspx页面,允许用户将修改后的条目提交到数据库中,但是当用户单击Submit以触发存储过程时,我想首先运行检查以查看是否存在具有相同关系的已修改行.
我传递以下查询的结果:
SELECT SwitchRoom.ModifiedID FROM SwitchRoom WHERE
SwitchRoomID = @ChkSwitchRmID", constring;
Run Code Online (Sandbox Code Playgroud)
进入a DataReader以确定该关系是否存在.
我需要它来确定阅读器是否返回NULL以允许执行该过程,如果没有,则不允许用户保存信息.
我尝试过以下方法:
if (dbreader = NULL)
{
Fire Procedure
}
else
{
"Error Message"
}
Run Code Online (Sandbox Code Playgroud)
而且我甚至试图将读者传递给一个datatable并且运行它而没有任何运气.
如何检查DataReader的结果null?
我正在使用SQL Express 2010查询构建器.我需要能够增加一个字段.
在我的后面代码中,我打了一个电话,比如
tableAdapter.IncrementLikeCount(id);
Run Code Online (Sandbox Code Playgroud)
如果我只使用一个增量,那么like字段可以为null,所以我想要一个.在该字段中将null视为零或b.如果为null,则设置为1,否则增加.
我尝试的最新内容是选项b,在查询构建器中包含以下代码:
UPDATE [dbo].[myTable]
SET [LikeCount] = IIF(ISNULL([LikeCount]), 1, LikeCount + 1)
WHERE ([ID] = @Original_ID)
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.查询构建器将继续在ISNULL内重写表达式,而不使用方括号和逗号,如下所示:
UPDATE [dbo].[myTable]
SET [LikeCount] = IIF(ISNULL(LikeCount,), 1, LikeCount + 1)
WHERE ([ID] = @Original_ID)
Run Code Online (Sandbox Code Playgroud)
有一个干净,简单的方法吗?
我发现自己从各种SQL对象(DataTable,SqlReader)中读取数据并分配给我自己的自定义对象.通常,我无法确定从数据库检索的数据是否为空或包含有效数据.虽然我使我的对象属性可以为空但我仍然无法将对象值分配给整数属性.
public int? ClientId{ get; set; }
this.ClientId = clientTable.Rows[0]["ID"];
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我不能将clientTable.Rows[0]["ID"]as转换为as,int因为值可能是null.
this.ClientId = (int)clientTable.Rows[0]["ID"]; // WARNING! value could be null
Run Code Online (Sandbox Code Playgroud)
所以我认为扩展方法是个好主意(我从这个SO答案得到了这个想法)....
public static int GetIntFromDB(this DataRow row, string columnName)
{
return row[columnName] as int? ?? default(int);
}
Run Code Online (Sandbox Code Playgroud)
使用...调用扩展方法
this.ClientId = clientTable.Rows[0].GetIntFromDB("ID");
Run Code Online (Sandbox Code Playgroud)
问题是Extension方法总是返回一个整数.有没有办法将NULL值返回给对象属性?
我有一个名为"InsertEmpolyee"的函数,它接收填充查询字符串的参数.问题是,我想让这些变量中的一些变成可选的,换句话说,我希望能够在不将值传递给这些参数的情况下调用函数,并且仍然通过将NULL插入数据库来生成正确的查询字符串.
这是InsertEmployee函数
public int InsertEmployee(string FirstName, char Minit, string LastName, int SSN
, int? Salary)
{
string query = "INSERT INTO Employee (Fname, Minit, Lname, SSN, Salary) " + "Values ('" + FirstName + "','" + Minit + "','" + LastName + "'," + Salary + ");";
return model.ExecuteNonQuery(query);
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何称呼它.
int res = Controlobj.InsertEmployee(txtbox_FirstName.Text, txtbox_Minit.Text[0],
txtbox_LastName.Text, Int32.Parse(txtbox_SSN.Text), null);
Run Code Online (Sandbox Code Playgroud)
我试图做以下事情
if (!Salary.HasValue)
Salary = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
但它给我以下错误"不能隐式地将system.DBNull转换为int?"
我怎样才能解决这个问题?还有更好的方法吗?