如何在C#中创建数据表以及如何添加行?


196

如何在C#中创建数据表?

我确实是这样的:

 DataTable dt = new DataTable();
 dt.clear();
 dt.Columns.Add("Name");
 dt.Columns.Add("Marks");

我如何看待DataTable的结构?

现在,我想补充拉维Name500Marks。我怎样才能做到这一点?


2
@可爱。只是评论-如果您使用的是.NET 3.5,则应该真正看到LINQ to SQL提供的功能。如果确实决定沿用DataTable / DataSet路由,请至少查看创建强类型的DataTable。
RichardOD

Answers:


256

这是代码:

DataTable dt = new DataTable(); 
dt.Clear();
dt.Columns.Add("Name");
dt.Columns.Add("Marks");
DataRow _ravi = dt.NewRow();
_ravi["Name"] = "ravi";
_ravi["Marks"] = "500";
dt.Rows.Add(_ravi);

要查看结构,或者更确切地说,将其改写为架构,可以通过执行以下操作将其导出到XML文件。

要仅导出模式/结构,请执行以下操作:

dt.WriteXMLSchema("dtSchemaOrStructure.xml");

此外,您还可以导出数据:

dt.WriteXML("dtDataxml");

8
DataTable类没有AddRow方法。您必须执行dt.Rows.Add(_ravi); 而是
Salamander2007

1
而且没有AddRow这样的东西。它是DataTable.Rows.Add()
djdd87,2009年

如果您将DataView与CurrentRows以外的其他过滤器一起使用,请不要忘记调用dt.AcceptChanges()。
Salamander2007 2009年

@ DanD,@ Salamander2007:同意。我现在改变了。对于这个错误,我们深表歉意,因为我使用支持此功能的类型化数据集。
这个。__curious_geek 09年

@phoenix:我只是想让提问者愉快地与我的答案联系起来。
这个。__curious_geek 09年

65

您还可以传递对象数组,如下所示:

DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("Name");
dt.Columns.Add("Marks");
object[] o = { "Ravi", 500 };
dt.Rows.Add(o);

甚至:

dt.Rows.Add(new object[] { "Ravi", 500 });

11
对此的另一种选择是,请注意Add上面显示的方法具有可变数量的参数的重载,因此您可以将其缩短为dt.Rows.Add("Ravi", 500);并且可以相同地工作。使用这两种方法的一个重要警告:您必须以与定义列完全相同的顺序提供这些参数,否则会出现错误。(因此请谨慎使用!)
Funka 2013年

34
// Create a DataTable and add two Columns to it
DataTable dt=new DataTable();
dt.Columns.Add("Name",typeof(string));
dt.Columns.Add("Age",typeof(int));

// Create a DataRow, add Name and Age data, and add to the DataTable
DataRow dr=dt.NewRow();
dr["Name"]="Mohammad"; // or dr[0]="Mohammad";
dr["Age"]=24; // or dr[1]=24;
dt.Rows.Add(dr);

// Create another DataRow, add Name and Age data, and add to the DataTable
dr=dt.NewRow();
dr["Name"]="Shahnawaz"; // or dr[0]="Shahnawaz";
dr["Age"]=24; // or dr[1]=24;
dt.Rows.Add(dr);

// DataBind to your UI control, if necessary (a GridView, in this example)
GridView1.DataSource=dt;
GridView1.DataBind();

29

创建数据表:

DataTable MyTable = new DataTable(); // 1
DataTable MyTableByName = new DataTable("MyTableName"); // 2

将列添加到表中:

 MyTable.Columns.Add("Id", typeof(int));
 MyTable.Columns.Add("Name", typeof(string));

将行添加到DataTable方法1:

DataRow row = MyTable.NewRow();
row["Id"] = 1;
row["Name"] = "John";
MyTable.Rows.Add(row);

将行添加到DataTable方法2:

MyTable.Rows.Add(2, "Ivan");

将行添加到DataTable方法3(通过相同结构从另一个表添加行):

MyTable.ImportRow(MyTableByName.Rows[0]);

向DataTable方法4添加行(从另一个表添加行):

MyTable.Rows.Add(MyTable2.Rows[0]["Id"], MyTable2.Rows[0]["Name"]);

将行添加到DataTable方法5(在索引处插入行):

MyTable.Rows.InsertAt(row, 8);

24

要添加一行:

DataRow row = dt.NewRow();
row["Name"] = "Ravi";
row["Marks"] = 500;
dt.Rows.Add(row);

要查看结构:

Table.Columns

18

您可以使用DataRow.Add(params object [] values)而不是四行来写一个衬板

dt.Rows.Add("Ravi", "500");

当你创建新的DataTable对象,似乎没有必要Clear DataTable在第二天发言。您也可以使用DataTable.Columns.AddRangeon语句添加列。完整的代码将是。

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Name"), new DataColumn("Marks") });     
dt.Rows.Add("Ravi", "500");

14

您可以在一行中添加行

    DataTable table = new DataTable();
    table.Columns.Add("Dosage", typeof(int));
    table.Columns.Add("Drug", typeof(string));
    table.Columns.Add("Patient", typeof(string));
    table.Columns.Add("Date", typeof(DateTime));

    // Here we add five DataRows.
    table.Rows.Add(25, "Indocin", "David", DateTime.Now);
    table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
    table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
    table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
    table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

11
DataTable dt=new DataTable();
Datacolumn Name = new DataColumn("Name");
Name.DataType= typeoff(string);
Name.AllowDBNull=false; //set as null or not the default is true i.e null
Name.MaxLength=20; //sets the length the default is -1 which is max(no limit)
dt.Columns.Add(Name);
Datacolumn Age = new DataColumn("Age", typeoff(int));`

dt.Columns.Add(Age);

DataRow dr=dt.NewRow();

dr["Name"]="Mohammad Adem"; // or dr[0]="Mohammad Adem";
dr["Age"]=33; // or dr[1]=33;
dt.add.rows(dr);
dr=dt.NewRow();

dr["Name"]="Zahara"; // or dr[0]="Zahara";
dr["Age"]=22; // or dr[1]=22;
dt.rows.add(dr);
Gv.DataSource=dt;
Gv.DataBind();

9
DataTable dt=new DataTable();
DataColumn Name = new DataColumn("Name",typeof(string)); 

dt.Columns.Add(Name);
DataColumn Age = new DataColumn("Age", typeof(int));`

dt.Columns.Add(Age);

DataRow dr=dt.NewRow();

dr["Name"]="Kavitha Reddy"; 
dr["Age"]=24; 
dt.add.Rows(dr);
dr=dt.NewRow();

dr["Name"]="Kiran Reddy";
dr["Age"]=23; 
dt.Rows.add(dr);
Gv.DataSource=dt;
Gv.DataBind();

8

为此,您必须将数据行添加到数据表中。

// Creates a new DataRow with the same schema as the table.
DataRow dr = dt.NewRow();

// Fill the values
dr["Name"] = "Name";
dr["Marks"] = "Marks";

// Add the row to the rows collection
dt.Rows.Add ( dr );

8

最简单的方法是从现在开始创建DtaTable

DataTable table = new DataTable
{
    Columns = {
        "Name", // typeof(string) is implied
        {"Marks", typeof(int)}
    },
    TableName = "MarksTable" //optional
};
table.Rows.Add("ravi", 500);

4

除了其他答案。

如果您控制DataTable的结构,则存在添加行的快捷方式:

//假设您有一个示例中定义的数据表dt dt.Rows.Add(“ Name”,“ Marks”);

DataRowCollection.Add()方法具有一个重载,该重载采用对象的参数数组。此方法使您可以根据需要传递尽可能多的值,但是它们的顺序必须与表中定义的列的顺序相同。

因此,尽管这是添加行数据的便捷方法,但使用起来可能会有风险。如果表结构更改,您的代码将失败。


1

问题1:如何在C#中创建数据表?

答1:

DataTable dt = new DataTable(); // DataTable created

// Add columns in your DataTable
dt.Columns.Add("Name");
dt.Columns.Add("Marks");

注意:没有必要Clear()DataTable创建后。

问题2:如何添加行?

答案2:添加一行:

dt.Rows.Add("Ravi","500");

添加多行:使用ForEach循环

DataTable dt2 = (DataTable)Session["CartData"]; // This DataTable contains multiple records
foreach (DataRow dr in dt2.Rows)
{
    dt.Rows.Add(dr["Name"], dr["Marks"]);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.