Làm cách nào để thêm một cột và dữ liệu mới vào một cơ sở dữ liệu đã chứa dữ liệu?


81

Làm cách nào để thêm DataColumnmột DataTableđối tượng mới vào một đối tượng đã chứa dữ liệu?

Mã giả

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", type(System.Int32));

foreach(DataRow row in dr.Rows)
{
    //need to set value to NewColumn column
}

Câu trả lời:


126

Chỉ cần tiếp tục với mã của bạn - bạn đang đi đúng hướng:

//call SQL helper class to get initial data 
DataTable dt = sql.ExecuteDataTable("sp_MyProc");

dt.Columns.Add("NewColumn", typeof(System.Int32));

foreach(DataRow row in dt.Rows)
{
    //need to set value to NewColumn column
    row["NewColumn"] = 0;   // or set it to some other value
}

// possibly save your Dataset here, after setting all the new values

Bạn có cần gọi dt.AcceptChanges()sau khi tôi thêm cột và giá trị mới không?
Michael Kniskern

2
@Michael: không, không hẳn. Tập dữ liệu của bạn hiện đã được bổ sung các giá trị mới đó. Nếu bạn muốn lưu nó, bạn cần phải có một số loại phương pháp để ghi lại nó (thông qua SqlDataAdapter hoặc một số phương tiện khác). AcceptChanges () sẽ không thực hiện bất kỳ điều gì (ngoại trừ đánh dấu những thay đổi đó là "được chấp nhận" -> chúng sẽ không được phát hiện để lưu vào lần tiếp theo bạn lưu dữ liệu của mình!)
marc_s 22/02/10

13

Nó không nên foreachthay vì cho !?

//call SQL helper class to get initial data  
DataTable dt = sql.ExecuteDataTable("sp_MyProc"); 

dt.Columns.Add("MyRow", **typeof**(System.Int32)); 

foreach(DataRow dr in dt.Rows) 
{ 
    //need to set value to MyRow column 
    dr["MyRow"] = 0;   // or set it to some other value 
} 

7

Đây là một giải pháp thay thế để giảm vòng lặp For / ForEach, điều này sẽ giảm thời gian lặp và cập nhật nhanh chóng :)

 dt.Columns.Add("MyRow", typeof(System.Int32));
 dt.Columns["MyRow"].Expression = "'0'";

2
@Akxaya, bạn có vui lòng giải thích thêm về cách hoạt động của giải pháp đó không?
Mikael Dúi Bolinder

DataTable dt = sql.ExecuteDataTable ("sp_MyProc"); // dt.Columns.Add ("MyRow", typeof (System.Int32)); dt.Columns ["MyRow"]. Expression = "'0'";
Akxaya

6

Chỉ bạn muốn đặt tham số giá trị mặc định. Phương thức nạp chồng thứ ba đang gọi này.

dt.Columns.Add("MyRow", type(System.Int32),0);

2

Thử cái này

> dt.columns.Add("ColumnName", typeof(Give the type you want));
> dt.Rows[give the row no like  or  or any no]["Column name in which you want to add data"] = Value;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.