2010-10-12 88 views
6

您好我试图根据GridView的数据键值插入null在数据库列(如果“”插入到数据库中的空值) 但是,我在数据库列中获取空间''。如何在数据库中插入null?

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

你看到实际的T-SQL正在执行什么? (即使用SQL Profiler)。 ToString可能放在''中。但是你说有一个空间“,我不知道它会如何发生。更有可能sbcId!=“”,它的==“”。 – RPM1984 2010-10-12 09:36:08

+0

谢谢RPM1984。我正在使用DB2。似乎使用ToString()以某种方式被翻译成数据库列中的“'。 – 2010-10-12 09:49:23

回答

17

你必须重写代码:

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

与三元的问题,如果你有说法是,它的返回类型必须始终是相同的,这就是为什么你不能使用它(字符串,DbNull.Value不兼容)

+0

谢谢klausbyskov。这很奇妙! =)。你有什么提示,为什么数据库中的字段值'''即使字符串''''。 – 2010-10-12 09:50:11

1

DBNull.Value

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

这不适用于三元运算符,但我解决了这个问题。谢谢Pranay。 – 2010-10-12 09:51:24

8

后下方通过删除的ToString()使用DBNull.Value,不DBNull.Value.ToString。 (使用.NET中的其他参数集合类型,只需使用null也可以,但我不能100%确定OleDbParameter)。

至于三级运营商。不要转换为字符串,但投的字符串对象:

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

谢谢乔恩。你是对的,只是将问题铸成字符串。 – 2010-10-12 09:50:43

+1

啊。在铸件上添加了一些东西。 – 2010-10-12 09:56:30

+0

谢谢,这也有帮助。我+1你的答案已经标记。 – 2010-10-12 10:00:16

3

您需要使用DBNull.ValueDBNull.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()); 
     } 
    } 
} 

alt text

+0

感谢Preet虽然问题解决了,但我很疑惑为什么数据库列有“'即使字符串是''? – 2010-10-12 10:01:06

+0

桌子的ddl是什么?它有触发器吗? – 2010-10-12 10:10:12

+0

nope它是一个带参数的简单插入语句。 – 2010-10-12 10:12:28

0

如果您在访问数据库中插入一个非字符串值,你可以写插入查询这样

插入into tableName(column1,column2)values(NULL,NULL);

但是你要插入在获取短文本或长文本字段为空值,你可以写插入查询这样

INSERT INTO表名(列1,列2)VALUES(“”,“” );

-2

你拉开这样

string value = ""; 

现在添加下面一行

if (value == ""){ 

    value = "NULL"; 
    } 

现在插入数据库,并检查是否具有空值的符合逻辑

0

SQLString.Null应该只是做的工作罚款:)

0

我更喜欢使用扩展方法来处理而不是多个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())); 
相关问题