有谁知道是否可以使用MYSQLI bind_param将NULL插入到列中.
我有一种情况,有时我想在bind_param中将列设置为null.像这样......
$column2 = "NULL";
$insert_data->bind_param('ss', $column1,$column2);
Run Code Online (Sandbox Code Playgroud)
显然,这只是将NULL作为字符串写入列.我尝试过null和\ 0但它们不起作用.
我想知道是否有一些值,我可以使$ column2相等,这将导致它提交和实际的空值而不是.
否则,我将不得不动态构建类型和参数列表,并使用call_user_func_array创建我的绑定,以便在它们为null时不写入列.我可以这样做,但它导致了许多繁琐的额外代码,所以我只是想知道这是否可以避免.谢谢
我有一个Oracle数据表获取为null的列.所以我想保持代码很好,很简单,我会使用?? 操作数.AlternatePhoneNumber是我的C#模型中的字符串.
AlternatePhoneNumber = customer.AlternatePhoneNumber ?? ""
Run Code Online (Sandbox Code Playgroud)
但是,即使使用该代码,我仍然会收到错误.
System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'.
Run Code Online (Sandbox Code Playgroud)
我知道错误意味着什么,但为什么?在DBNull上不可用?是不是null和DBNull基本相同?
谢谢.
我已经开始使用Rob Conery的Massive了.令人敬畏的小"ORM",非常高效.但是,我在可空字段上遇到System.DBNull比较问题.
例如,我想检查属性是否与另一个属性匹配(在此示例中为long类型)
if (obj.MemberId == otherObj.MemberId) return true;
Run Code Online (Sandbox Code Playgroud)
抛出异常:运算符'=='不能应用于'System.DBNull'和'long'类型的操作数.在这种情况下,obj.MemberId为null(更具体地说,DBNull).
好的,所以我先检查一下它的DBNull.Value是否正确?像这样:
if (obj.MemberId != DBNull.Value)
return obj.MemberId == otherObj.MemberId;
Run Code Online (Sandbox Code Playgroud)
酷,这是有效的,至少在obj.MemberId是DBNull时,但是当它不是(包含一个long)时,另一个例外:运算符'!='不能应用于'long'和'System.DBNull'类型的操作数.
DBNull正在杀了我.如何可靠地检查可空属性是否不包含数据?
我有一个返回三个整数的 SQLDataReader。但是,有时两个整数将返回空值。
为了解决这个问题,我写了以下内容:
int shoppingCartHeadID = 0;
int billID = 0;
int delID = 0;
conn.Open();
reader = comm.ExecuteReader();
if (reader.Read())
{
shoppingCartHeadID = Convert.ToInt32(reader["shoppingCartHeadID"]);
if (!reader.IsDBNull(billID))
{
billID = Convert.ToInt32(reader["billID"]);
}
if (!reader.IsDBNull(delID))
{
delID = Convert.ToInt32(reader["delID"]);
}
}
reader.Close();
Run Code Online (Sandbox Code Playgroud)
不幸的是我仍然收到错误消息。有什么建议么?
PS我也尝试过这个但没有运气
if (reader["billID"] != null)
我听说框架4中有一个字段扩展方法允许一个接收来自datareader的空值,而不必经过第一次测试的过程,如果不是null然后......等等.这里有关于扩展方法的信息(MSDN)),但我不知道如何在代码中使用它(相对较新的.net和以前从未使用过的扩展方法).如果有人能举一个例子,我将不胜感激.
这是我试图实现的,但是当在任一列中返回dbnull时它会返回错误.
Reader.Read()
Dim Val As Nullable(Of Double) = Reader.GetDecimal(0)
Dim Vol As Nullable(Of Long) = Reader.GetInt32(1)
Run Code Online (Sandbox Code Playgroud) 我将Excel文件导入ASP.NET DataTable.有些值是空白的,特别是在索引2和3处,我想将这些空白字段设置为0.
调试时,该值row.item(2)和row.item(3)均System.DBNull.有趣的是,程序进入If语句并将row.item(2)值设置为0,但它从不进入ElseIf语句.到底是怎么回事?这是我的代码:
If row.Item(2) Is Nothing OrElse row.Item(2).ToString = "" OrElse IsDBNull(row.Item(2)) Then
dt.Rows.Item(i).SetField(2, 0)
ElseIf row.Item(3) Is Nothing OrElse row.Item(3).ToString = "" OrElse IsDBNull(row.Item(3)) Then
dt.Rows.Item(i).SetField(3, 0)
End If
Run Code Online (Sandbox Code Playgroud)
编辑:
根据蒂姆的建议,我修改了我的代码如下:
If Not row.Field(Of Int32?)(2).HasValue Then
dt.Rows.Item(i).SetField(2, 0)
End If
If Not row.Field(Of Int32?)(3).HasValue Then
dt.Rows.Item(i).SetField(3, 0)
End If
Run Code Online (Sandbox Code Playgroud)
然而,这是一个错误 - Object cannot be cast from DBNull to other types
调试时,在第一个循环中:
row.Item(2) = 17 …
我一直无法为这个问题找到合适的解决方案,我知道这很简单,但我忘记了怎么做.我有一个带有一个textfield字段的表单,用户不需要填写.我想在数据库中插入NULL,而不是它当前正在执行的0.不过,我不确定我错过了什么.文本框已命名taxRateTxt,我目前无法为我工作:
try
{
using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
{
cn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.Parameters.Add(new SqlParameter("@FIPSCountyCode", countyCodeTxt.Text));
cmd.Parameters.Add(new SqlParameter("@StateCode", stateCodeList.SelectedValue));
cmd.Parameters.Add(new SqlParameter("@CountyName", countyNameTxt.Text));
string taxStr = taxRateTxt.Text;
//test for an empty string and set it to db null
if (taxStr == String.Empty)
{
taxStr = DBNull.Value;
}
cmd.Parameters.Add(new SqlParameter("@TaxRate", taxStr));
if (AddBtn.Visible == true)
cmd.CommandText = addQuery;
if (EditBtn.Visible == true)
{
cmd.CommandText = editQuery;
}
cmd.ExecuteNonQuery();
cn.Close();
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我正在构造一个带有参数的 Command 对象来设置列值。我想使用一个简单的条件将某个nullable int列设置为整数值或DbNull.Value,具体取决于变量是否为空。
例子:
dbCmd.Parameters.Add("@MyIntColumn", SqlDbType.Int).Value =
myColumnValue == null ? DBNull.Value : myColumnValue;
Run Code Online (Sandbox Code Playgroud)
当然,这会给编译器错误:“DbNull 和 int 之间没有隐式转换”。
那么在那里使用条件的正确方法是什么,其结果可以是 int 或 DbNull?
我正在寻找一种更简单的方法来检查一个值是否为dbNull并将其转换为空字符串(如果是这样).
我需要这种情况的一个例子是:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0)
Msgbox(someStr)
Run Code Online (Sandbox Code Playgroud)
问题是如果dt.rows(0).item(0)在数据库中为空,它将作为dbNull值返回,这显然不会附加到字符串.
我对这个问题的解决方案是使用if语句用空字符串替换值:
Dim dt As New DataTable
Dim conn As New OleDbConnection(someConnStr)
Dim adap As New OleDbDataAdapter(qryCSSInfo, cssConn)
adap.Fill(dt)
If Not isDBNull(dt.rows(0).item(0)) then
Dim someStr As String = "The first column of the first row returned: " & dt.rows(0).item(0)
Else
Dim someStr As String …Run Code Online (Sandbox Code Playgroud) 我正在创建一个将在WPF项目和.NET Core项目中使用的类库.
对于以下代码:
public class MyClass
{
private void MyFunction(object o)
{
if (o == DBNull)
{
//ommitted
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
当前上下文中不存在名称"DBNull"
这是在Visual Studio 2017中创建的.NET标准类库项目.
我的.NET Core项目和WPF项目都允许使用DBNull.
dbnull ×10
c# ×6
.net ×3
asp.net ×2
vb.net ×2
datareader ×1
field ×1
if-statement ×1
insert ×1
mysqli ×1
oracle ×1
parameters ×1
sql-insert ×1
string ×1
vb.net-2010 ×1