在两个表之间添加 DataRelation, 代码如何写?

sangengyi 2004-07-18 11:23:34
1。

一个数据库有两个表,Zongzhang 和Zhichu, 后者是前者的子表,
以下是我的部分代码,在我的代码里如何添加 DataRelation?( 纯代码 )。

strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
FormCreateDatabase.Path;//返回文件路径
string strSqlZong = "SELECT * FROM Zongzhang";
string strSqlZhi = "SELECT * FROM Zhichu";

OleDbDataAdapter daZong = new OleDbDataAdapter( strSqlZong, strConn );
OleDbDataAdapter daZhi = new OleDbDataAdapter( strSqlZhi, strConn );
daZong.MissingSchemaAction = MissingSchemaAction.AddWithKey;
daZhi.MissingSchemaAction = MissingSchemaAction.AddWithKey;
DataSet ds = new DataSet( );
ds.Clear( );

daZong.Fill( ds, "Zongzhang" );
daZhi.Fill( ds, "Zhichu" );

gridZong.DataSource = ds;
gridZong.DataMember = "Zongzhang";

gridZhi.DataSource = ds;
gridZhi.DataMember = "Zhichu";

2。

我用ADOX创建了一个Access数据文件,能不能在ADOX里直接定义两个表的DataRelation?如何写?
...全文
340 13 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yanransoft 2004-07-18
daZong.Fill( ds ); /*从此行不知对不对
daZhi.Fill( ds );
改为:daZong.Fill( ds, "Zongzhang" );
daZhi.Fill( ds, "Zhichu" );
  • 打赏
  • 举报
回复
Bob 2004-07-18
DateTime 是SQL Server里面的关键子,可能跟这个有关~

最好修改表中相应列的字段名称.或用 [DateTime] ,加方括号
  • 打赏
  • 举报
回复
yanransoft 2004-07-18
daZong.Fill( ds ); /*从此行不知对不对
daZhi.Fill( ds );
放在
DataColumn colZong = ds.Tables[ "Zongzhang" ].Columns[ "DateTime" ];//错误提示
之前
  • 打赏
  • 举报
回复
sangengyi 2004-07-18
To: wnagsaohui:
我在我的代码中加了DataRelation的代码,错误提示:
未处理的“System.NullReferenceException”类型的异常出现在 ManageSystem.exe 中。

其他信息: 未将对象引用设置到对象的实例。

strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
FormCreateDatabase.Path;//返回文件路径
string strSqlZong = "SELECT * FROM Zongzhang";
string strSqlZhi = "SELECT * FROM Zhichu";

OleDbDataAdapter daZong = new OleDbDataAdapter( strSqlZong, strConn );
OleDbDataAdapter daZhi = new OleDbDataAdapter( strSqlZhi, strConn );
daZong.MissingSchemaAction = MissingSchemaAction.AddWithKey;
daZhi.MissingSchemaAction = MissingSchemaAction.AddWithKey;
DataSet ds = new DataSet( );
ds.Clear( );

DataColumn colZong = ds.Tables[ "Zongzhang" ].Columns[ "DateTime" ];//错误提示
//停在此行
DataColumn colZhi = ds.Tables[ "Zhichu" ].Columns[ "DateTime" ];

DataRelation rel = new DataRelation( "ZongZhi", colZong, colZhi );
ds.Relations.Add ( rel );

daZong.Fill( ds ); /*从此行不知对不对
daZhi.Fill( ds );

gridZong.DataSource = ds;
gridZong.DataMember = "Zongzhang";

gridZhi.DataSource = rel;
gridZhi.DataMember = "ZongZhi"; */

请帮忙给看一看。多谢。
  • 打赏
  • 举报
回复
wangsaokui 2004-07-18
用代码可以修改Access本身吗?可以的。
  • 打赏
  • 举报
回复
wangsaokui 2004-07-18
gridZong.DataSource = ds.Tables("Zongzhang");
gridZhi.DataSource = 你新建的关系 ;(类似于例子中的relCustOrder)
  • 打赏
  • 举报
回复
sangengyi 2004-07-18
To: upto:
Access本身没有定义关系,用代码可以修改Access本身吗?

To: wangsaohui:

gridZong.DataSource = ds;
gridZong.DataMember = "Zongzhang";//这两句应该怎麽写?


  • 打赏
  • 举报
回复
wangsaokui 2004-07-18
你没有告知两表的关系列,自己按照上面的例子改改就行了
  • 打赏
  • 举报
回复
Bob 2004-07-18
你的意思是修改Access本身嘛?
  • 打赏
  • 举报
回复
wangsaokui 2004-07-18
[C#]
private void CreateRelation() {
// Get the DataColumn objects from two DataTable objects in a DataSet.
DataColumn parentCol;
DataColumn childCol;
// Code to get the DataSet not shown here.
parentCol = DataSet1.Tables["Customers"].Columns["CustID"];
childCol = DataSet1.Tables["Orders"].Columns["CustID"];
// Create DataRelation.
DataRelation relCustOrder;
relCustOrder = new DataRelation("CustomersOrders", parentCol, childCol);
// Add the relation to the DataSet.
DataSet1.Relations.Add(relCustOrder);
}
  • 打赏
  • 举报
回复
sangengyi 2004-07-18
注:以上为WinForm
  • 打赏
  • 举报
回复
sangengyi 2004-07-18
我已把代码改了一下,但是关系好象还是不存在,请大家再给看看。多谢。

strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +
FormCreateDatabase.Path;
string strSqlZong = "SELECT * FROM Zongzhang";
string strSqlZhi = "SELECT * FROM Zhichu";

OleDbDataAdapter daZong = new OleDbDataAdapter( strSqlZong, strConn );
OleDbDataAdapter daZhi = new OleDbDataAdapter( strSqlZhi, strConn );
daZong.MissingSchemaAction = MissingSchemaAction.AddWithKey;
daZhi.MissingSchemaAction = MissingSchemaAction.AddWithKey;
DataSet ds = new DataSet( );
ds.Clear( );

daZong.Fill( ds, "Zongzhang" );
daZhi.Fill( ds, "Zhichu" );

DataRelation rel = new DataRelation( "ZongZhi",
ds.Tables[ "Zongzhang" ].Columns[ "DateTimeZong" ],
ds.Tables[ "Zhichu" ].Columns[ "DateTimeZhi" ] );
ds.Relations.Add( rel );

gridZong.DataSource = ds; /*是不是DataSource
gridZong.DataMember = "Zongzhang"; 和DataMember的
设置问题*/
gridZhi.DataSource = ds;
gridZhi.DataMember = "Zhichu";
  • 打赏
  • 举报
回复
wangsaokui 2004-07-18
把daZong.Fill( ds, "Zongzhang" );
daZhi.Fill( ds, "Zhichu" );
放到前面,放到
DataColumn colZong = ds.Tables[ "Zongzhang" ].Columns[ "DateTime1" ];
前面
datetime最好改名字,这是sqlserver的保留字。

否则没有填充,DS中还没有datatable和相应的列,如何建立关系呢
  • 打赏
  • 举报
回复
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2004-07-18 11:23
社区公告

让您成为最强悍的C#开发者