2012-08-24 27 views
0

好的,也許我正在繞過這個錯誤。我們將看到。C#用DBNull.value更新數據庫條目似乎錯誤

因此,我正在檢查一些數據。這些數據將會是Int32類型。或多或少,如果該物品不是我的標誌之一,我想將其設置爲DBNull.value,我相信。

我想確定的是列是可以爲空的,所以如果我不輸入任何東西,它應該被設置爲null。

這裏是我的程序邏輯:

int content = 5; //set for sake of program; 
int test; 
if(content == 5){ 
    test = content; 
}else{ 
    //i want test to be labeled as DBNULL. 
    //didnt know if i could redefine here to be like: 
    //  free(test); DBNull test = new DBNull; 
} 
//my companys db command 
CommandFactory cmd = new CommandFactory(); 
cmd.commandText = "insert into TABLE (value) values (@a)"; 
cmd.addInputParameters("@a", test, DBType.Int32); 
... 

在這種情況下,怎麼會是等它的DBNull?如:

if(test != -1){ 
    cmd.addInputParameters("@a", test, DBType.Int32); 
} 
//no param would be entered for @a, maybe forcing it to be null? 

在表的定義,值是空的,所以你不必擔心。

雖然正確答案張貼,它是不是一個最後我用我的同事也沒有要我做「魔法」與??,所以他們有我做:

int? temp; 
if(temp.HasValue){ 
    cmd.addInputParameters("@a", temp, DBType.Int32); 
}else{ 
    cmd.addInputParameters("@a", DBNull.Value, DBType.Int32); 
} 
+0

我建議你學習LINQ to Entities,除非你有一個很好的理由去做這個原始的方法。 – Jeroen

回答

4

如何:

int? test = content 
... 
cmd.addInputParameters("@a", (object)test ?? DbNull.Value, DBType.Int32); 
+0

我忘了這一點。看起來這可能是一個好主意。我要去測試一下。這看起來應該工作.. – Fallenreaper

+0

似乎,當我嘗試這樣做,它會給出一個錯誤說:**運營商'??'不能應用於'int?'類型的操作數和'System.DBNull'** – Fallenreaper

+0

已修改。 ?? ??運營商希望雙方的事物屬於同一類型。 – Liazy

0

你的問題真的很難理解,但我認爲你的意思是你想有一個可能的空整數。簡單地聲明測試是一個空的int而不是一個普通的int。所以:

int? test = null;

+0

當我這樣做,並做測試? DBNull.Value,我得到一個錯誤說:** Operator'??'不能應用於'int?'類型的操作數和'System.DBNull'** – Fallenreaper

0

試試這個代碼在數據庫中插入一個空整數。我已經把int作爲一個可爲空的數據類型,爲此必須在db中'test'列是可空的。

 int content = 5; //set for sake of program; 
     int? test = null; 
     if (content == 5) 
     { 
      test = content; 
     } 

     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandText = "insert into TABLE (columnNameforTest) values (@test)"; 
     cmd.Parameters.AddWithValue("@test", test); 
     SqlConnection con = new SqlConnection("yourconnectionstring"); 
     int i = cmd.ExecuteNonQuery();