如何将null插入数据库?

Posted

技术标签:

【中文标题】如何将null插入数据库?【英文标题】:How to insert null into database? 【发布时间】:2010-10-12 09:32:56 【问题描述】:

您好,我正在尝试根据 gridview 数据键值在数据库列中插入空值(如果是“”,则将空值插入数据库) 但是,我在数据库列中得到了一个空格''。

string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
 insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value.ToString():sbcId)));

【问题讨论】:

您看到正在执行的实际 T-SQL 了吗? (即使用 SQL 事件探查器)。 ToString 可能会放入''。但是你说有一个空格'',我看不出它是怎么发生的。更可能是 sbcId != "",它是 == " "。 感谢 RPM1984。我正在使用 DB2。似乎使用 ToString() 以某种方式翻译成数据库列内的 ' '。 【参考方案1】:

你必须重写你的代码:

if(string.IsNullOrEmpty(sbcId))
    Parameters.Add(new OleDbParameter("EMPID", DBNull.Value)); 
else
    Parameters.Add(new OleDbParameter("EMPID", sbcId)); 

您拥有的三元 if 语句的问题是它的返回类型必须始终相同,这就是您不能使用它的原因(字符串和 DbNull.Value 不兼容)

【讨论】:

谢谢克劳斯比斯科夫。那效果很好! =)。你有什么提示为什么数据库中的列有值''即使字符串有''。 为什么 pictureBox1.Tag != null ? ImageOperations.ImageToBytes(pictureBox1.Image) : DBNull.Value throwing: Feature 'target-typed conditional expression' 在 c# 7.3 中不可用。请使用 9.0 或更高版本的语言。 我必须为此做一个 if else 才能工作。我正在使用.net 框架。这仅适用于 .net 核心吗?【参考方案2】:

使用DBNull.Value,而不是DBNull.Value.ToString。 (对于 .NET 中的其他参数集合类型,仅使用 null 也可以,但我不能 100% 确定 OleDbParameter)。

至于三级算子。不要强制转换为字符串,而是将字符串强制转换为对象:

sbcId=="" ? DBNull.Value : (object)sbcId

【讨论】:

谢谢乔恩。你是对的,唯一的问题是转换成字符串。 啊。在铸件上添加了一些东西。 谢谢,这也很有帮助。我 +1 你作为答案已被标记。【参考方案3】:

你需要使用DBNull.Value 而不是DBNull.Value.ToString()

DBNull.Value.ToString() 是''

这个程序给了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1

    class Program
    
        static void Main(string[] args)
        
            Console.WriteLine("'0'", DBNull.Value.ToString());
        
    

【讨论】:

感谢 Preet 虽然问题已解决,但我很困惑为什么数据库列有 ' ' 即使字符串是 '' ? 表格的 ddl 是什么?有触发器吗? @ZoHas ,因为他使用的单引号是使用双引号声明的文本并污染了结果,所以在使用字符串格式时,您不需要将变量 0 封装在引号中。 。 IE。 Console.WriteLine("0", DBNull.Value.ToString()); 会很好。【参考方案4】:

在 DBNull.Value 之后删除 ToString() 试试下面

string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
 insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value:sbcId)));

【讨论】:

这不适用于三元运算符,但我解决了这个问题。谢谢普拉奈。【参考方案5】:

SQLString.Null 应该可以很好地完成这项工作:)

【讨论】:

【参考方案6】:

我更喜欢使用扩展方法来处理而不是多个 if 语句。这允许您考虑 null 或空字符串值。还允许它可重复使用。

    public static object GetDBNullOrValue<T>(this T val)
    
        bool isDbNull = true;
        Type t = typeof(T);

        if (Nullable.GetUnderlyingType(t) != null)
            isDbNull = EqualityComparer<T>.Default.Equals(default(T), val);

        else if (t.IsValueType)
            isDbNull = false;

        else if (t == typeof(string) && val != null)
        
            string temp = val as String;
            isDbNull = (temp == String.Empty);
        

        else
            isDbNull = (val == null);

        return isDbNull ? DBNull.Value : (object)val;
    

那么你可以使用

     Parameters.Add(new OleDbParameter("EMPID", sbcId.GetDBNullOrValue())); 

【讨论】:

【参考方案7】:

如果你在access数据库中插入一个非字符串值,你可以这样写插入查询

插入tableName(column1,column2)值(NULL,NULL);

但你想在访问中的短文本或长文本字段中插入空值,你可以这样写插入查询

插入tableName(column1,column2) values('','');

【讨论】:

【参考方案8】:

你的字符串是这样的

string value = "";

现在添加以下行

 if (value == "")

  value = "NULL";
     

现在插入 db 并检查是否有 null 值,它们是合乎逻辑的

【讨论】:

以上是关于如何将null插入数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 将“NULL”值插入 PostgreSQL 数据库?

如何使用 Python 将 NULL 值插入 PostgreSQL 数据库?

postgresql的copy命令如何将csv中的引号转换成null插入?

如何使用 Spring JDBC Framework 将“null”时间戳插入 DB2 数据库

如何使用参数化输入将 NULL 值从 nodeJS/javascript 插入 MySQL?

C# - 将 null 插入 SQL Compact Edition 表