如何将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并检查您是否具有空值,它们是合乎逻辑的