【问题标题】:Inserting Null into a database with C#使用 C# 将 Null 插入数据库
【发布时间】:2019-12-13 14:52:40
【问题描述】:

我对 C# 还很陌生,正在为以下查询苦苦挣扎。

我正在尝试将值插入数据库,但它不接受 null 作为值。我需要区分该字段中的 0 和无,因为它显示了是否发生了计算。

这是我目前所拥有的:

System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection();
var connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\Projects\database.accdb";
System.Data.OleDb.OleDbCommand ins = new System.Data.OleDb.OleDbCommand();

objConn.ConnectionString = connStr;
objConn.Open();

ins.Connection = objConn;
ins.CommandText = "INSERT INTO AutomatedDecisionProcess(item1, item2, item3) VALUES(@item1, @item2, @item3)";

ins.Parameters.AddWithValue("@item1", SolveBlanks(row[0]));
ins.Parameters.AddWithValue("@item2", SolveBlanks(row[1]));
ins.Parameters.AddWithValue("@item3", SolveBlanks(row[2]));

ins.ExecuteNonQuery();
objConn.Close();
ins.Dispose();

Console.WriteLine("success?");

我正在尝试我编写的这个函数:

public static string SolveBlanks(object number)
{
        string answer = number.ToString();

        if (answer == "")
        {
            answer = null;
        }
        return answer;
}

有什么想法吗?

【问题讨论】:

  • 试试dbnull
  • 当您尝试插入 null 时会发生什么? “它不起作用”并没有提供任何关于问题可能是什么的迹象。另外,聪明的用户名。我喜欢它。
  • 不建议使用AddWithValue,特别是如果值为null,此方法可能无法设置正确的参数类型。而是自己创建和添加参数。
  • @RenéVogt 很有趣,到目前为止我已经找到了解决我的问题的所有方法,我会考虑创建参数,谢谢!

标签: c# sql .net ms-access


【解决方案1】:

答案来自:What is the difference between null and System.DBNull.Value?

这可能对你有帮助...

嗯,null 不是任何类型的实例。相反,它是一个无效的引用。

但是,System.DbNull.Value 是对 System.DbNull 实例的有效引用(System.DbNull 是单例,System.DbNull.Value 为您提供对该类的单个实例的引用),表示不存在* 数据库中的值。

*我们通常会说 null,但我不想混淆这个问题。

因此,两者之间存在很大的概念差异。关键字 null 表示无效的引用。 System.DbNull 类表示数据库字段中不存在的值。一般来说,我们应该尽量避免使用相同的东西(在本例中为 null)来表示两个截然不同的概念(在本例中为无效引用与数据库字段中不存在的值)。

请记住,这就是为什么很多人普遍提倡使用空对象模式的原因,这正是 System.DbNull 的一个例子。

【讨论】:

  • 太好了,感谢您的解释!我改变了功能,一切都很好! public static object SolveBlanks(object number) { object answer = number.ToString(); if (answer.ToString() == "") { answer = System.DBNull.Value; } return answer; }
【解决方案2】:

你应该学习一下DBNull

让我们试试下面的代码:

public static object SolveBlanks(object number)
        {
            object answer = number.ToString();
            if (answer == "")
            {
                answer = DBNull.Value;
            }
            return answer;
        }

【讨论】:

    猜你喜欢
    • 2016-02-25
    • 1970-01-01
    • 2014-09-24
    • 2019-09-25
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多