Code Bye

使用ADO.net向数据库添加列的问题

            //本人想不用SQL语句把 不同数据源的表架构复制出来, 使用DataSet的话,发现目标数据列改变后,MDB文件里根本就没更新,原因是什么。
string strConnection = “Provider=Microsoft.Jet.OLEDB.4.0;”;
strConnection += String.Format(@”Data Source={0};”, sourDBPath);
string strConnection2 = “Provider=Microsoft.Jet.OLEDB.4.0;”;
strConnection2 += String.Format(@”Data Source={0};”, decDBPath);
try
{
OleDbConnection sourConn = new OleDbConnection(strConnection);
OleDbCommand cmd = new OleDbCommand(“select * from T1”, sourConn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTableMapping mapping = da.TableMappings.Add(“T1”, “T1”);
mapping.ColumnMappings.Add(“ID”, “ID”);
mapping.ColumnMappings.Add(“NAME”, “NAME”);
DataSet ds = new DataSet();
sourConn.Open();
da.Fill(ds, “T1”);
OleDbConnection decConn = new OleDbConnection(strConnection2);
OleDbCommand cmd2 = new OleDbCommand(“select * from T1”, decConn);
OleDbDataAdapter da2 = new OleDbDataAdapter(cmd2);
decConn.Open();
OleDbCommandBuilder cb3 = new OleDbCommandBuilder(da2);
DataSet ds2 = new DataSet();
da2.Fill(ds2, “T1”);
ds2.Tables[0].Columns.Clear();//清除再有列
foreach (DataColumn col in ds.Tables[0].Columns)
{
DataColumn d = new DataColumn(col.ColumnName, col.DataType, col.Expression, col.ColumnMapping);
ds2.Tables[0].Columns.Add(d);//再加入源表的列信息
}
ds2.AcceptChanges();
//int n = da2.Update(ds2, “T1”); //使用这句返回是0
sourConn.Close();
decConn.Close();
解决方案

10

你更改的是ds,并不是更改数据库表结构。
更改数据库表结构需要alter modify column语句,或drop后再重建表。

10

引用 2 楼 ph78_2 的回复:

也就是说只能用SQL语句来改?

正确

20

对于数据库的全部操作,就是根据sql语句执行的。
包括ef等orm框架也是翻译成sql执行。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用ADO.net向数据库添加列的问题