c# - 使用 C# 将 Null 插入数据库

标签 c# sql .net ms-access

我是 C# 的新手,正在努力处理以下查询。

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

这是我目前所拥有的:

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;
}

有什么想法吗?

最佳答案

答案来自: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 的一个例子。

关于c# - 使用 C# 将 Null 插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59324926/

相关文章:

.net - 动态选择 Entity Framework 中事件可用数据库的连接字符串

c# - Crystal Reports 中类似面板的控件

c# - 如何取消SQL打开

php - 是否可以通过内连接查询Mysql

php - 异常 'PDOException',消息为“SQLSTATE[HY093] : Invalid parameter number: number of bound variables does not match number of tokens”

MySQL 子查询的查询性能 - 具有数百万行的表

c# - 合并顺序检查

c# - 是否有用 C# 编写的开源 HTML 渲染器?

c# - UWP ZipFile.CreateFromDirectory

c# - CartesianChart(实时图表)不适用于 DataTemplate