2014-11-22 60 views
0

将数据库的行值分配给新的数据行对象后,此对象中的任何更改都会影响数据表,为什么?Datarow对象,为什么这段代码有效?

看看这段代码。

DataRow dr = mydataset.Tables["NewTable"].Rows[0]; 
    dr["Name"] = "hello"; 

现在,如果你尝试调试应用程序,你会发现,原来的数据表[“newtable的”]有新价值的招呼,而不是旧值虽然我们并没有返回回上述数据行数据表(我们没有保存它)

我只需要澄清,也需要知道&了解当我创建一个数据行的对象时实际发生了什么。

回答

1

DataTable和DataRow都是引用数据类型。这意味着,当您将一个变量赋值给代码中的引用时,它只是将指针保存回相同的内存位置。

DataRow dr1 = mydataset.Tables["NewTable"].Rows[0]; 
DataRow dr2 = mydataset.Tables["NewTable"].Rows[0]; 
DataRow dr3 = dr1; 
DataTable dt = mydataset.Tables["NewTable"]; 
DataRow dr4 = dt.Rows[0]; 

在上例中,dr1,dr2,dr3和dr4都指向相同的内存位置。因此,如果您编辑dr4,则更改将显示在dr1,dr2和dr3上。

请参阅Value Types and Reference Types了解更多信息。