添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
// Make a DataTable using the function below. DataTable dt = MakeTableWithAutoIncrement(); DataRow relation; // Declare the array variable. object [] rowArray = new object[2]; // Create 10 new rows and add to DataRowCollection. for(int i = 0; i <10; i++) rowArray[0]=null; rowArray[1]= "item " + i; relation = dt.NewRow(); relation.ItemArray = rowArray; dt.Rows.Add(relation); PrintTable(dt); private DataTable MakeTableWithAutoIncrement() // Make a table with one AutoIncrement column. DataTable table = new DataTable("table"); DataColumn idColumn = new DataColumn("id", Type.GetType("System.Int32")); idColumn.AutoIncrement = true; idColumn.AutoIncrementSeed = 10; table.Columns.Add(idColumn); DataColumn firstNameColumn = new DataColumn("Item", Type.GetType("System.String")); table.Columns.Add(firstNameColumn); return table; private void PrintTable(DataTable table) foreach(DataRow row in table.Rows) foreach(DataColumn column in table.Columns) Console.WriteLine(row[column]); }异常:
异常类型 条件

ArgumentException

数组大于表中的列数。

InvalidCastException

数组中的值与其相应的 DataColumn 中的 DataType 不匹配。

ConstraintException

编辑破坏了约束。

ReadOnlyException

编辑试图更改只读列的值。

NoNullAllowedException

编辑试图将空值放在 DataColumn 对象的 AllowDBNull 为 false 的列中。

DeletedRowInaccessibleException

该行已被删除。

DataRow.ItemArray 属性源代码实现:
public object[] ItemArray
		int defaultRecord = this.GetDefaultRecord();
		object[] array = new object[this._columns.Count];
		for (int i = 0; i < array.Length; i++)
			DataColumn dataColumn = this._columns[i];
			array[i] = dataColumn[defaultRecord];
		return array;
		if (value == null)
			throw ExceptionBuilder.ArgumentNull("ItemArray");
		if (this._columns.Count < value.Length)
			throw ExceptionBuilder.ValueArrayLength();
		DataColumnChangeEventArgs dataColumnChangeEventArgs = null;
		if (this._table.NeedColumnChangeEvents)
			dataColumnChangeEventArgs = new DataColumnChangeEventArgs(this);
		bool flag = this.BeginEditInternal();
		for (int i = 0; i < value.Length; i++)
			if (value[i] != null)
				DataColumn dataColumn = this._columns[i];
				if (-1L != this.rowID && dataColumn.ReadOnly)
					throw ExceptionBuilder.ReadOnly(dataColumn.ColumnName);
				if (dataColumnChangeEventArgs != null)
					dataColumnChangeEventArgs.InitializeColumnChangeEvent(dataColumn, value[i]);
					this._table.OnColumnChanging(dataColumnChangeEventArgs);
				if (dataColumn.Table != this._table)
					throw ExceptionBuilder.ColumnNotInTheTable(dataColumn.ColumnName, this._table.TableName);
				if (-1L != this.rowID && dataColumn.ReadOnly)
					throw ExceptionBuilder.ReadOnly(dataColumn.ColumnName);
				if (this.tempRecord == -1)
					this.BeginEditInternal();
				object obj = (dataColumnChangeEventArgs != null) ? dataColumnChangeEventArgs.ProposedValue : value[i];
				if (obj == null)
					if (dataColumn.IsValueType)
						throw ExceptionBuilder.CannotSetToNull(dataColumn);
					obj = DBNull.Value;
					int proposedRecordNo = this.GetProposedRecordNo();
					dataColumn[proposedRecordNo] = obj;
				catch (Exception e)
					if (ADP.IsCatchableOrSecurityExceptionType(e) && flag)
						this.CancelEdit();
					throw;
				this.LastChangedColumn = dataColumn;
				if (dataColumnChangeEventArgs != null)
					this._table.OnColumnChanged(dataColumnChangeEventArgs);
		this.EndEdit();
                                    DataRow对象有两个比较重要的属性,分别是行状态(RowState)和行版本(DataRowVersion),通过这两个属性能够有效的管理表中的行。下面简要的介绍一下行状态和行版本的特点和关系。ü         行状态(RowState):l         UnChanged状态:指表中的行自创建之后没有做过任何改动的状态,或则是行在上次接受修改之后,至今未做过任何改动的状态。l
                                    现在我们有一个简单的需求,一个DataRow里面1万列(创建它的DataTable有1万列),我们要把它增加一列并为这个Cell更新一个数据。
DataRow根本没有添加Column的的方法,我们自然而然会想到复制DataRow的方法。其实也可以一个cell一个cell地复制,但是我们发现可以通过DataRowItemArray一次性导入到新的DataRow。
请参看下面代码,我们定义了一个10列的DataTable,然后在添加一行数据时,动态把DataTable扩展到10000列,由于我们一开始的D
                                    在操作DataRow的数据时,往往要给其中一列赋值。编程的时候发现用ItemArray直接赋值,或者用setValue,对应的DataRow中相应的列的值都没有变化。
            DataRow dr;//省略了给dr赋值或者引用等的步骤
            dr.ItemArray[4] = value;//该值为int型(虽然与问题无关)
            dr.I...
                                    下面两个方法是DataRow复制一行到另一个DataTable的,直接Add会出错“此行已属于另一个表”
每次要用到的时候还是犯糊涂,这次把它们记下来。
1.用DataRow.ItemArray
DataTable t=new DataTable();
DataRow r=t.NewRow();
r.ItemArray=oldRow.ItemArray;
t.Rows.Add(r);
                                    我在开发一个C#项目中,有个需求就是将一个表中的一行数据,整条赋值到另一个表中,这时,会报一个System.ArgumentException:“该行已经属于另一个表。从其他地方找到了个方法,就是在赋值的那条数据后,加上个方法:ItemArrayItemArray:通过数组获取或设置此行的所有值;
在对DataRow的所有字段赋值时,使用字段名进行逐列赋值效率较低。这时应尽量使用批量字段赋值。可以使用ItemArray或rows.Add方法:/ ds是数据集(DataSet)对象
DataTable dt = ds.Tables[0];
DataRow row = d...
                                    来源:kroll在.net里,DataRow类型的对象是不支持序列化的,那么如果在一个需要序列化的对象中含有DataRow类型的字段该怎么办呢?呵呵,幸好Datatable是支持序列化的。因此,我们可以自定义序列化的行为,并在序列化和反序列化的时候用Datatable来对DataRow进行包装和解包。为了自定义序列化行为,必须实现ISerializable接口。实现这个接口要实现 GetObjec...
                                    这个需求的关键是:所要获取的DataRow对象的结构要和真实的数据库结构相同总体上分为俩个大方法:1———使用DataSet或者是DataTable自身的Load方法  和  DataAdapter的fill方法来获得在内存中创建完整的数据库模型,可以使用DataAdapter对象来创建。首先建立一个临时的空数据库,然后使用数据适配器对象中的fill方法进行数据填充,这样就获得了数据库的完整的...
                                    在C#中的Datatable数据变量的操作过程中,有时候我们需要知道DataTable中是否含有数据行或者DataTable的数据总行数,此时我们就可以先拿到DataTable中的Rows属性对象,通过Rows属性对象的Count属性即可获取总行数。
   例如我们我们有个DataTable变量为dt,需要通过C#获取该DataTable的总行数可使用下列语句:
introwCount = dt.Rows.Count;
一、C#获取该DataTable的总行数源程序