问题:System.InvalidOperationException: 对于不返回任何基表信息的 SelectCommand 不支持动态 SQL 生成

时间:2021-11-29 09:28:08
我在编辑datagrid的控件的保存功能时,当程序执行到
OleDbCommandBuilder custCB = new OleDbCommandBuilder(NComm);
系统显示错误:
System.InvalidOperationException: 对于不返回任何基表信息的 SelectCommand 不支持动态 SQL 生成

我想问一下这里指的基表信息是什么,出现这个错误该怎么解决,谢谢!



程序:
public void DataGrid1_Update(object Sender,DataGridCommandEventArgs e)
{
DataSet NowDS = (DataSet)Session["NowDS"];
OleDbDataAdapter NComm = new OleDbDataAdapter(d, Source);
NComm.Fill(NowDS, "staff");
for(int i=1;i<=3;i++)
  {
TextBox CurrentText;
CurrentText = (TextBox)e.Item.Cells[i].Controls[0];//取得文本框
NowDS.Tables["竞赛种类及相关信息"].Rows[DataGrid1.EditItemIndex][i-1]=CurrentText.Text;
  }
OleDbCommandBuilder custCB = new OleDbCommandBuilder(NComm);
NComm.Update(NowDS,"竞赛种类及相关信息");//保存
DataGrid1.EditItemIndex = -1;
bindNew(true);
        }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
d的定义:
string d="SELECT 竞赛种类, 开始时间, 截止时间, 是否删除 FROM 竞赛种类及相关信息";
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数据源的定义:
Source = (OleDbConnection)Session["ConnectToTest_Neo"];
//Session已经在global文件中定义

~~~~~~~~~~~~~~~~~~~~~~~~~~~
绑定datagrid:
void bindNew(Boolean tag)
      {//结合至DataGrid
if(tag==true)
{
DataSet DS = new DataSet();
OleDbDataAdapter NComm = new OleDbDataAdapter(d, Source);
NComm.Fill(DS, "竞赛种类及相关信息");
Session["NowDS"]=DS;//声明为Session
DataGrid1.DataSource=DS.Tables["竞赛种类及相关信息"].DefaultView;
DataGrid1.DataBind();
}
else//如果不是重新绑定,维持原来的绑定
  {
DataSet DS=(DataSet)Session["NowDS"];
DataGrid1.DataSource=DS.Tables["竞赛种类及相关信息"].DefaultView;
DataGrid1.DataBind();
  }
      }

6 个解决方案

#1


NComm.SelectCommand应该是Select语句;
如果NComm.Update时有Update或Delete(不仅仅Insert),表要有主键

#2


我也碰到这种问题,不过后来发现模版列写得不对,高手们能详细的说说原因和解决的方法码

#3


想问一下你做的是什么系统
数据库用的是什么呀

关注。。。

#4


我用的是oracle816

#5


up

#6


使用CommandBuilder的时候,表要有主键

#1


NComm.SelectCommand应该是Select语句;
如果NComm.Update时有Update或Delete(不仅仅Insert),表要有主键

#2


我也碰到这种问题,不过后来发现模版列写得不对,高手们能详细的说说原因和解决的方法码

#3


想问一下你做的是什么系统
数据库用的是什么呀

关注。。。

#4


我用的是oracle816

#5


up

#6


使用CommandBuilder的时候,表要有主键