2010-10-12 113 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()));