您好我試圖根據GridView的數據鍵值插入null在數據庫列(如果「」插入到數據庫中的空值) 但是,我在數據庫列中獲取空間''。如何在數據庫中插入null?
string sbcId = gvTest.DataKeys[gr.RowIndex]["myColumn"].ToString();
insgnp.Parameters.Add(new OleDbParameter("EMPID", (sbcId==""?DBNull.Value.ToString():sbcId)));
您好我試圖根據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