如何将null插入数据库?

您好我试图在数据库列中插入null取决于gridview datakeys值(如果是“”将null插入数据库)但是,我在数据库列中得到一个空格”。

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

你必须重写你的代码:

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

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

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

至于第三级运营商。 不要强制转换为字符串,而是将字符串强制转换为对象:

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

你需要使用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()); } } } 

替代文字

通过在DBNull.Value之后删除ToString()来尝试下面的操作

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

SQLString.Null应该可以正常工作:)

如果在访问数据库中插入非字符串值,则可以以这种方式编写插入查询

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

但是您希望在访问中的短文本或长文本字段中插入空值,您可以用这种方式编写插入查询

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

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

  public static object GetDBNullOrValue(this T val) { bool isDbNull = true; Type t = typeof(T); if (Nullable.GetUnderlyingType(t) != null) isDbNull = EqualityComparer.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())); 

你那样的字符串

 string value = ""; 

现在添加以下行

  if (value == ""){ value = "NULL"; } 

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