一个关于C#中OleDbDataAdapter更新回数据源的问题。 5
publicvoidDSToExcel(stringPath){stringstrCon="Provider=Microsoft.Ace.OleDb.12.0;"+"da...
public void DSToExcel(string Path)
{
string strCon = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + Path + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = "select * from [Sheet1$]";
myConn.Open ( ) ;
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
System.Data.OleDb.OleDbCommandBuilder builder = new OleDbCommandBuilder(myCommand);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
DataSet newds = new DataSet();
myCommand.Fill(newds, "Table1");
newds.Tables["Table1"].Rows[1][1] = "fly";
myCommand.Update(newds, "Table1");
myConn.Close();
}
代码如上。
我的问题是当把
newds.Tables["Table1"].Rows[1][1] = "fly";
换成
DataRow dr = newds.Tables["Table1"].NewRow();
dr[0] = "zx";
dr[1] = "100";
dr[2] = "beauty";
newds.Tables["Table1"].Rows.Add(dr);
可以在excel表中每次插入zx 100 beauty
但是用newds.Tables["Table1"].Rows[1][1] = "fly";这一句
就会出现
“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。”
这样的错误。
诚恳求解,请问我该怎么做? 展开
{
string strCon = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + Path + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = "select * from [Sheet1$]";
myConn.Open ( ) ;
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
System.Data.OleDb.OleDbCommandBuilder builder = new OleDbCommandBuilder(myCommand);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
DataSet newds = new DataSet();
myCommand.Fill(newds, "Table1");
newds.Tables["Table1"].Rows[1][1] = "fly";
myCommand.Update(newds, "Table1");
myConn.Close();
}
代码如上。
我的问题是当把
newds.Tables["Table1"].Rows[1][1] = "fly";
换成
DataRow dr = newds.Tables["Table1"].NewRow();
dr[0] = "zx";
dr[1] = "100";
dr[2] = "beauty";
newds.Tables["Table1"].Rows.Add(dr);
可以在excel表中每次插入zx 100 beauty
但是用newds.Tables["Table1"].Rows[1][1] = "fly";这一句
就会出现
“对于不返回任何键列信息的 SelectCommand,不支持 UpdateCommand 的动态 SQL 生成。”
这样的错误。
诚恳求解,请问我该怎么做? 展开
2个回答
2014-03-31
展开全部
newds.Tables["Table1"].Rows[1][1] = "fly" 插入某行的一个列值
而
newds.Tables["Table1"].Rows.Add(dr); 插入整行
你的myCommand()对应返回的是选择对象(string strCom = "select * from [Sheet1$]";)
Update()方法是将修改后的table存入数据库,
newds.Tables["Table1"].Rows[1][1] = "fly"; 是对表的某一行某一列赋值,
Update()方法如果找不到表的主键,所以会产生“不支持 UpdateCommand 的动态 SQL 生成”的错误信息
而
newds.Tables["Table1"].Rows.Add(dr); 插入整行
你的myCommand()对应返回的是选择对象(string strCom = "select * from [Sheet1$]";)
Update()方法是将修改后的table存入数据库,
newds.Tables["Table1"].Rows[1][1] = "fly"; 是对表的某一行某一列赋值,
Update()方法如果找不到表的主键,所以会产生“不支持 UpdateCommand 的动态 SQL 生成”的错误信息
更多追问追答
追问
你好你好。非常感谢你的回答。
还请问一下。
我主要是想达到这样的要求。
就是从excel表格中获取数据存放到dataset中。
如果我更改了dataset的数据,希望能更新到excel中。
我该如果达到这个要求呢?
在我这里,我该怎么设置表的主键呢?
实在是不好意思,新手小程序员。
追答
这里一时半会不知道怎么跟你讲,网上有很多ExcelHelper这样的操作类,很简单的,对于excel的操作很全面,你可以看看
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询