NET插入语法错误详细解释
对问题的描述:我使用OLEDB数据写入数据的访问。示例源代码如下所示:
复制代码代码如下所示:
SQL =SELECT * FROM多表;
数据适配器olesub =新数据适配器(SQL,olecn);
OleDbCommandBuilder CB1 =新OleDbCommandBuilder(olesub);
数据集DS =新数据集();
Olesub.fill(DS。多表);
DataTable dt = DS表{多表};
DataRow博士= dt.newrow();
DR {prserv} =ws+ index.tostring(。padleft)(6,'尺');
{数字00063;
Dt.rows.add(博士);
olesub.update(DS,mulittable );
这个代码编译没有问题,但是当它运行时,运行时错误:报道的插入语句的语法错误。使用OLEDBAdapter时,我没有指定一个插入语句,但使用OleDbCommandBuilder自动生成INSERT语句。如果你仔细想想,你为什么会犯这样的错误我的结论是,这个表单中的字段名可能使用访问系统的保留字,所以我在Access中创建了一个查询,自己写了一个INSERT SQL,确认我的结论是正确的,号码是系统的保留字,如何修改它
一般来说,最简单的方法是改变字段的名称和替换它与非系统保留字的名字,但图书馆的结构是由客户提供,并没有修改是允许的。根据以往的经验,当我们操作Access,SQL Server,如果表字段包含保留字的系统,我们可以将场上的括号,如插入tblmultitable(prserv,{数量})值(…),但是从上面的代码中我们看不到的地方,我们可以指定一个插入语句。我想OleDbCommandBuilder应该自动根据使用的适配器的选择语句生成INSERT语句,所以只添加括号中选择属性字段管理,所以我做了以下修改。
SQL选择prserv,{数量},priorref让与人、受让人、从多表;
修改后,测试之后,仍然生成了前一个INSERT语句语句的语法错误,问题会在哪里出现我想应该是在oledbcommanbuilder,在一般情况下,你只需要使用oledbcommanbuilder类。
数据适配器olesub =新数据适配器(SQL,olecn);
OleDbCommandBuilder CB1 =新OleDbCommandBuilder(olesub);
打开MSDN和看的oledbcommanbuilder类的成员,发现两个关键属性:quoteprefix,QuoteSuffix;仔细想想,OLEDB访问数据类型非常多啊,所以关键字段的前缀,后缀的处理方法肯定是不一样的,比如当你访问Excel应{ Sheet1 $方式,所以在某种程度上是相当灵活的,后来我修改代码重新分配两个属性:
复制代码代码如下所示:
ataadapter olesub =新数据适配器(SQL,olecn);
OleDbCommandBuilder CB1 =新OleDbCommandBuilder(olesub);
CB1。quoteprefix ={};
CB1。QuoteSuffix =};