为什么我只能插入ACCESS,而不能插入ORACLE 这个用的就是OLEDB呀,还有什么别的用法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你在 oracle 里定义主建了吗?另外说一下 什么错误提示阿? 大家又不是编译器 主键的值都填了,而且代码运行没有错误提示,就是运行完了记录没插入去。而同样的代码把Connection对象换成ACCESS的就没有问题。 我说的是 ex.ToString() 是什么阿? ex.ToString()是异常的描述,可以执行过程中没有异常发生,所以没有可以捕获的异常。我这么用ADO.NET是对的吗?编译器没有报错,而且在ACCESS上也能正确执行啊。 用户名和密码没错,报了个异常,不知道是什么意思,请大家指点。System.InvalidOperationException;对于不返回任何基表信息的SelectCommand不支持动态SQL生成。 at System.Data.Common.DbDataAdapter.Update(Datarow[] dataRows,DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet,String srcTable) at AdoNetTest.Form1.button1_Click(Object sender,EventArgs e)in d:\C#\adonettest\form1.cs:line 121 myda.Fill(ds,"table1"); 这句错了改成: myda.Fill(ds,"t_gpsusers"); 是不是你的表里没有数据? 如果是,先添点测试数据看看 另:在做GPS阿?什么公司 ("select * from t_gpsusers",mycn);这个表名如果在Oracle中也是小写的可能会出问题 改成: myda.Fill(ds,"t_gpsusers");--------没有用。表里有数据。表名改成大写也没效果。太郁闷了,什么叫“对于不返回任何基表信息的SelectCommand不支持动态SQL生成。”啊。 DbDataAdapter的其他属性设了吗?表映射 DbDataAdapter的其他属性有哪些需要设的呀? 万一不行,就下个oracle_net.msi,OralceDataAdapter.fill()绝对成功! 难倒这种标准的方法对ORACLE不适用? 有同样的问题,改成oracleclient吧 把你的UpdateCommand 贴出来,可能你是用Access 生成的,后来改的Oracle Connection,可是命令不能通用 没用有UpdataCommand呀,只是调用了OleDbDataAdapter的Update方法啊。DataSet ds=new DataSet();myda.Fill(ds,"table1");DataRow dr;dr=ds.Tables["table1"].NewRow();dr["CARCODE"]="F0001";dr["GPSID"]="010199000099";dr["CARPHONE"]="13999999999";ds.Tables["table1"].Rows.Add(dr);myda.Update(ds,"table1"); 自己重写Update方法.以下例子是为了同步数据库而写的,因为原有的Update不好用,你可以参考一下/// <summary>/// 自定义更新数据库/// </summary>/// <param name="ds"></param>/// <returns></returns>public bool Update (DataSet ds){ try { string sql = "DELETE From UserInfo "; base.ExecuteNonQuery(sql); sql = "DELETE From DepartmentInfo "; base.ExecuteNonQuery(sql); // open if(connection.State != ConnectionState.Closed ) connection.Close(); connection.Open(); SqlCommand command = new SqlCommand(); command.Connection = connection; SqlDataAdapter sqlDA= new SqlDataAdapter(); sqlDA.SelectCommand = command; // DataSet dschange = ds.GetChanges(); foreach (DataTable dt in ds.Tables) { SqlCommand insert = new SqlCommand(); string items = ""; string values = ""; foreach( DataColumn dc in dt.Columns ) { items += ","+dc.ColumnName ; values += ",@"+dc.ColumnName ; // types[index] = dc.DataType ; insert.Parameters.Add(new System.Data.SqlClient.SqlParameter("@"+dc.ColumnName, dc.DataType )); } items = items.Substring(1); values = values.Substring(1); string cmd = " INSERT INTO " + dt.TableName + " ( "+items+") values ( "+values+")"; insert.CommandText = cmd; insert.Connection = base.connection ; sqlDA.InsertCommand = insert; foreach(DataRow dr in dt.Rows) { for(int i = 0 ; i < insert.Parameters.Count; i++) { insert.Parameters[i].Value = dr[i]; } insert.ExecuteNonQuery(); } // sqlDA.Update(dt); } // sqlDA.Update(dschange); 本来想用这种方法,可是没有效果// int nRows = sqlDA.Fill( dsExists, "table2" ); // if(nRows == 0 ) // dataSet = null; if(connection.State != ConnectionState.Closed ) connection.Close(); } catch(Exception ex ) { Console.WriteLine(ex.Message); return false; } return true;} wpf listview不同列数据绑定 ADO.Net的问题 关于winform的textBox只能输入数字的设置,各位大侠请进 使用c#.net,接收pop3附件问题 C# 如何用摄像头抓取图像,如何把图像保存到硬盘 remoting的初级问题 求各位达人,在C#里如何利用.framework的类实现在NT环境下关机!!! 請問,我用什麼namespace可以列舉局域網所有的電腦或用戶?謝謝! 请问在windowform中,在datagrid中如何改变标题的显示? 关于类的问题 请问高手们??????~~~~!!!!???? 怎样实现多线程分块下载文件??
报了个异常,不知道是什么意思,请大家指点。
System.InvalidOperationException;对于不返回任何基表信息的SelectCommand不支持动态SQL生成。
at System.Data.Common.DbDataAdapter.Update(Datarow[] dataRows,DataTableMapping tableMapping)
at System.Data.Common.DbDataAdapter.Update(DataSet dataSet,String srcTable)
at AdoNetTest.Form1.button1_Click(Object sender,EventArgs e)in d:\C#\adonettest\form1.cs:line 121
改成: myda.Fill(ds,"t_gpsusers");
是不是你的表里没有数据?
如果是,先添点测试数据看看
另:在做GPS阿?什么公司
这个表名如果在Oracle中也是小写的可能会出问题
表里有数据。
表名改成大写也没效果。太郁闷了,什么叫“对于不返回任何基表信息的SelectCommand不支持动态SQL生成。”啊。
DataSet ds=new DataSet();
myda.Fill(ds,"table1");
DataRow dr;
dr=ds.Tables["table1"].NewRow();
dr["CARCODE"]="F0001";
dr["GPSID"]="010199000099";
dr["CARPHONE"]="13999999999";
ds.Tables["table1"].Rows.Add(dr);
myda.Update(ds,"table1");
/// 自定义更新数据库
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public bool Update (DataSet ds)
{
try
{
string sql = "DELETE From UserInfo ";
base.ExecuteNonQuery(sql);
sql = "DELETE From DepartmentInfo ";
base.ExecuteNonQuery(sql);
// open
if(connection.State != ConnectionState.Closed )
connection.Close();
connection.Open(); SqlCommand command = new SqlCommand();
command.Connection = connection; SqlDataAdapter sqlDA= new SqlDataAdapter(); sqlDA.SelectCommand = command; // DataSet dschange = ds.GetChanges();
foreach (DataTable dt in ds.Tables)
{
SqlCommand insert = new SqlCommand();
string items = "";
string values = "";
foreach( DataColumn dc in dt.Columns )
{
items += ","+dc.ColumnName ;
values += ",@"+dc.ColumnName ;
// types[index] = dc.DataType ;
insert.Parameters.Add(new System.Data.SqlClient.SqlParameter("@"+dc.ColumnName, dc.DataType ));
}
items = items.Substring(1);
values = values.Substring(1); string cmd = " INSERT INTO " + dt.TableName + " ( "+items+") values ( "+values+")"; insert.CommandText = cmd;
insert.Connection = base.connection ; sqlDA.InsertCommand = insert;
foreach(DataRow dr in dt.Rows)
{
for(int i = 0 ; i < insert.Parameters.Count; i++)
{
insert.Parameters[i].Value = dr[i];
}
insert.ExecuteNonQuery();
}
// sqlDA.Update(dt);
} // sqlDA.Update(dschange); 本来想用这种方法,可是没有效果// int nRows = sqlDA.Fill( dsExists, "table2" ); // if(nRows == 0 )
// dataSet = null; if(connection.State != ConnectionState.Closed )
connection.Close(); }
catch(Exception ex )
{
Console.WriteLine(ex.Message);
return false;
}
return true;
}