2011-06-15 74 views
18

Tôi có một cột có thể định vị với một tên cột "CustomerID" với kiểu dữ liệu nguyên. Tự động tôi muốn thêm hàng vào DataTable. Đối với điều đó, tôi đã tạo một đối tượng DataRow như:Gán giá trị Null cho cột nguyên trong DataTable

DataTable dt = new DataTable(); 
    DataRow DR = dt.NewRow(); 
    DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); 

Nhưng nếu TextBox chứa chuỗi rỗng, nó sẽ phát ra lỗi. Trong trường hợp đó, tôi muốn gán giá trị Null cho CustomerID. làm như thế nào?

+0

@Marc tại sao không bạn đề nghị anh ta một cái gì đó thay vì sử dụng DataTable? – mqpasta

+1

@Marc: Có. Tôi đang sử dụng DataTable. – thevan

Trả lời

25

Một null/chuỗi rỗng là sai định dạng; bạn sẽ cần phải phát hiện kịch bản và phải bồi thường:

DR["CustomerID"] = string.IsNullOrWhiteSpace(text) 
     ? DBNull.Value : (object)Convert.ToInt32(text); 
4
DR["CustomerID"] = !string.IsNullOrEmpty(TextBox1.Text) 
        ? Convert.ToInt32(TextBox1.Text) 
        : DBNull.Value; 

Nhưng bạn cũng nên kiểm tra xem giá trị là một số nguyên hợp lệ:

int value; 
if(int.TryParse(TextBox1.Text, out value)) 
{ 
    DR["CustomerID"] = value; 
} 
else 
{ 
    DR["CustomerID"] = DBNull.Value; 
} 
1

Bạn có thể sử dụng DBNull.

DR["CustomerID"] = (TextBox.Text.Length == 0) ? Convert.ToInt32(TextBox1.Text) : DBNull.Value; 
1
if (TextBox1.Text.Trim() == String.Empty) 
    { 
     DR["CustomerID"] = null; 
    } 
    else 
    { 
     DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); 
    } 
2

bạn có thể làm điều đó như thế:

DR["CustomerID"] = string.IsNullOrEmpty(TextBox1.Text) ? 
    null : Convert.ToInt32(TextBox1.Text); 
2

Trước hết, tất nhiên, lĩnh vực này cần phải được thiết lập như là nullable trong DB.

Và sau đó, thiết lập nó để DBNull.Value

1
DataTable dt = new DataTable(); 
DataRow DR = dt.NewRow(); 

if (String.IsNullOrEmpty(TextBox1.Text)) 
    DR["CustomerID"] = DBNull.Value; 
else 
    DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); 
1

Nếu bạn khai báo biến Integer như int? nó được tự động đóng gói bởi trình biên dịch C# và bạn có thể gán null cho biến đó. Ví dụ:

int? custID = null; 

Tôi hy vọng rằng sẽ giúp

2

Bạn cần phải kiểm tra đầu tiên

if (TextBox1.Text.Length > 0) 
{ 
    DR["CustomerID"] = Convert.ToInt32(TextBox1.Text); ; 
} 
else 
{ 
    DR["CustomerID"] = null; 
} 
2
Int32 Temp = 0; 
if !(Int32.TryParse(TextBox1.Text,Temp)) 
    DR["CustomerID"] = DBNull.Value 
else 
    DR["CustomerID"] = Temp 
1

Khi null không được phép được chèn vào DR["CustomerID"], bạn có thể sử dụng thay vì (int?)null như thế này:

DR["CustomerID"] = string.IsNullOrEmpty(TextBox1.Text) ? 
(int?) null : Convert.ToInt32(TextBox1.Text); 
Các vấn đề liên quan