如何在数据库中插入null?
您好我试图根据GridView的数据键值插入null在数据库列(如果“”插入到数据库中的空值) 但是,我在数据库列中获取空间''。如何在数据库中插入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));
与三元的问题,如果你有说法是,它的返回类型必须始终是相同的,这就是为什么你不能使用它(字符串,DbNull.Value不兼容)
谢谢klausbyskov。这很奇妙! =)。你有什么提示,为什么数据库中的字段值'''即使字符串''''。 – 2010-10-12 09:50:11
DBNull.Value
string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value:sbcId)));
这不适用于三元运算符,但我解决了这个问题。谢谢Pranay。 – 2010-10-12 09:51:24
后下方通过删除的ToString()使用DBNull.Value
,不DBNull.Value.ToString
。 (使用.NET中的其他参数集合类型,只需使用null
也可以,但我不能100%确定OleDbParameter
)。
至于三级运营商。不要转换为字符串,但投的字符串对象:
sbcId=="" ? DBNull.Value : (object)sbcId
谢谢乔恩。你是对的,只是将问题铸成字符串。 – 2010-10-12 09:50:43
啊。在铸件上添加了一些东西。 – 2010-10-12 09:56:30
谢谢,这也有帮助。我+1你的答案已经标记。 – 2010-10-12 10:00:16
您需要使用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());
}
}
}
感谢Preet虽然问题解决了,但我很疑惑为什么数据库列有“'即使字符串是''? – 2010-10-12 10:01:06
桌子的ddl是什么?它有触发器吗? – 2010-10-12 10:10:12
nope它是一个带参数的简单插入语句。 – 2010-10-12 10:12:28
如果您在访问数据库中插入一个非字符串值,你可以写插入查询这样
插入into tableName(column1,column2)values(NULL,NULL);
但是你要插入在获取短文本或长文本字段为空值,你可以写插入查询这样
INSERT INTO表名(列1,列2)VALUES(“”,“” );
你拉开这样
string value = "";
现在添加下面一行
if (value == ""){
value = "NULL";
}
现在插入数据库,并检查是否具有空值的符合逻辑
SQLString.Null
应该只是做的工作罚款:)
我更喜欢使用扩展方法来处理而不是多个if语句。这使您可以考虑空值或空字符串值。也允许它可重用。
public static object GetDBNullOrValue<T>(this T val)
{
bool isDbNull = true;
Type t = typeof(T);
if (Nullable.GetUnderlyingType(t) != null)
isDbNull = EqualityComparer<T>.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()));
你看到实际的T-SQL正在执行什么? (即使用SQL Profiler)。 ToString可能放在''中。但是你说有一个空间“,我不知道它会如何发生。更有可能sbcId!=“”,它的==“”。 – RPM1984 2010-10-12 09:36:08
谢谢RPM1984。我正在使用DB2。似乎使用ToString()以某种方式被翻译成数据库列中的“'。 – 2010-10-12 09:49:23