我是 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/