net insert into语法错误详解

问题描述:
我用oledb的方式向access数据里写数据,示例源码如下:


代码如下:

sql="select * from multitable";
oledbdataadapter olesub=new oledbdataadapter(sql,olecn);
oledbcommandbuilder cb1=new oledbcommandbuilder(olesub);
dataset ds=new dataset();
olesub.fill(ds."multitable");
datatable dt=ds.tables["multitable"];
datarow dr=dt.newrow();
dr["prserv"]="ws"+index.tostring().padleft(6,''''0'''');
dr["number"]="00063";
dt.rows.add(dr);
olesub.update(ds,"mulittable");

这段代码编译的时候是没有问题的,但是在运行的时候,会报出一个运行时错误:”insert into 语句的语法错误“。用oledbadapter的时候,我并没有指定insert语句,而是用oledbcommandbuilder 来自动产生insert 语句的。仔细想了一下,为什么会产生这个错误呢?我的结论是,可能这张表里的字段名使用了access系统的保留字。于是我在access里创建了一个查询,自己写了一个insert sql,证实我的结论是正确的,number是系统的一个保留字,那怎么修改呢?
一般来说,最简单的方法就是改掉这个字段名,换成非系统保留字的名字,但是库的结构是客户提供的,不允许修改,只有想别的办法。考虑以前的经验,操作access,sql server的时候,如果表的字段中包含了系统的保留字的话,我们在字段外加上方括号就可以了,比如 insert into tblmultitable(prserv,[number]) values(.......)就可以了。可是从上面的代码中我们看到并没有什么地方我们可以指定insert 语句。我想oledbcommandbuilder应该是根据adapter使用的select语句自动生成insert 语句的,所以只要给select 语句中的字段加上方括号就可以了,所以我作了如下的修改:
string sql="select prserv,[number],priorref,grantor,grantee from multitable";
修改完毕以后,测试以后,仍然产生以前的"insert into 语句的语法错误";问题会出在哪里呢?我想应该还是在oledbcommanbuilder上,一般来说,只需要这样用oledbcommanbuilder类就可了:
oledbdataadapter olesub=new oledbdataadapter(sql,olecn);
oledbcommandbuilder cb1=new oledbcommandbuilder(olesub);
打开msdn,看看oledbcommanbuilder的类成员。发现两个很关键的属性:quoteprefix,quotesuffix;仔细想想,oledb可以访问的数据类型非常多啊,所以关键字段的前缀,后缀的处理方法肯定不尽相同,比如访问excel的时候表明应该写成[sheet1$的方式],所以提供这样一种方式是相当灵活的。接下来我再次修改代码,对这两个属性赋值:


代码如下:

ataadapter olesub=new oledbdataadapter(sql,olecn);
oledbcommandbuilder cb1=new oledbcommandbuilder(olesub);
cb1.quoteprefix="[";
cb1.quotesuffix="]";

(0)

相关推荐

  • net insert into语法错误详解

    问题描述:我用oledb的方式向access数据里写数据,示例源码如下: 复制代码 代码如下: sql="select * from multitable";oledbdataadapter olesub=new oledbdataadapter(sql,olecn);oledbcommandbuilder cb1=new oledbcommandbuilder(olesub);dataset ds=new dataset();olesub.fill(ds."multitab

  • SQL Server之SELECT INTO 和 INSERT INTO SELECT案例详解

    做数据库开发的过程中难免会遇到有表数据备份的,而SELECT INTO--和INSERT INTO SELECT-- 这两种语句就是用来进行表数据复制,下面简单的介绍下: 1.INSERT INTO SELECT 语句格式:Insert Into Table2(column1,column2--) Select value1,value2,value3,value4 From Table1 或 Insert Into Table2 Select * From Table1 说明:这种方式的表复制

  • C语言开发中的常见错误详解

    目录 一.编译型错误 1.解释 2.解决办法 3.代码示例 二.链接型错误 1.解释 2.解决办法 3.代码示例 三.运行时错误 1.解释 2.解决办法 3.代码示例 一.编译型错误 1.解释 编译型错误一般指语法错误,直接看错误信息或者是凭借着经验就可以搞定,相对来说较简单. 2.解决办法 双击错误提示信息,编译器就会自动定位发生错误的位置,按照正确的语法改正即可. 3.代码示例 正确代码: #include<stdio.h> int main() { int a = 10; int b =

  • vue模板语法-插值详解

    1.文本 数据绑定最常见的形式就是使用'Mustache'语法(双打括号)的文本插值: <span>message:{{msg}}</span> 使用v-once指令,也能执行一次性的插值,当主句改变时,插值处的内容不会更新. 但请留心这回影响到该节点上所有的数据绑定: <span v-once>this will nver change:{{message}}</span> 2.纯html 双打括号会将数据解释为纯文本,而非html.为了输出html可以使

  • Mysql 5.7.9 shutdown 语法实例详解

    mysql-5.7.9 终于提供shutdown 语法啦: 之前如果想关闭一个mysql数据库可以通过kill 命令.mysqladmin shutdown .service mysqld stop 等这样的方式. 然而在mysql-5.7.9之后mysql终于提供了SQL接口的shutdown语法啦! SQL接口下的shutdown语法: 语法 shutdown ; -- 这个shutdown要执行成功要有shutdown权限才行. shutdown的一个例子: [root@workstudi

  • Kotlin 基础语法实例详解

    Kotlin 基础语法实例详解 包 定义和引入Java一样,在文件开头, 行结束不需要" ; " package com.test.hello import android.os.Bundle 变量 只读变量,val 开头,初始化后不能再赋值,相当于Java的 final 变量 val a: Int = 1 val b = 1 //类型自动推断为Int val c: Int //没有初始化时必须指定类型 c = 1 //初始化 可变变量, var 关键字开头 var x = 10 x

  • MySQL系列多表连接查询92及99语法示例详解教程

    目录 1.笛卡尔积现象 2.连接查询知识点概括 1)什么是连接查询? 2)连接查询的分类 3.内连接讲解 1)等值连接:最大特点是,连接条件为等量关系. 2)sql92语法和sql99语法的区别. 3)非等值连接:最大特点是,连接条件为非等量关系. 4)自连接:最大特点是,一张表看作两张表. 4.外连接讲解 1)什么是外连接,和内连接有什么区别? 2)外连接的分类 前面两天带着大家换了一个口味,带着大家学习了pyecharts的原理和部分图形制作.今天我们继续回归带你学MySQL系列,带着大家继

  • Java Stream流语法示例详解

    目录 如何使用Stream? Stream的操作分类 1.创建流 2.操作流 1)过滤 2)映射 3)匹配 4)组合 3.转换流 如何使用Stream? 聚合操作是Java 8针对集合类,使编程更为便利的方式,可以与Lambda表达式一起使用,达到更加简洁的目的. 前面例子中,对聚合操作的使用可以归结为3个部分: 1)  创建Stream:通过stream()方法,取得集合对象的数据集. 2)  Intermediate:通过一系列中间(Intermediate)方法,对数据集进行过滤.检索等数

  • Python基础必备之语法结构详解

    目录 Python 语句 续行 隐式续行的方式 显式续行的方式 每行多语句 注释 空白字符 空格作为缩进 Python 语句 语句是 Python 解释器解析和处理的基本指令单元.通常解释器按顺序一个接一个的执行语句. 在 REPL 会话中,语句在输入时执行,直到解释器终止.当执行脚本文件时,解释器从文件中读取语句并执行直到遇到文件结尾. 通常每个语句占用一行,语句的结尾由标记行尾的换行符分隔. print('真・三國無双') 真・三國無双 x = ['劉備', '関羽','張飛'] print

  • Python datatime库语法使用详解

    目录 Python中datetime库的用法 datetime.date datetime的time类 datetime的timedelta类 datetime.timedelta Python中datetime库的用法 datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1. datetime模块定义了5个类: 1.datetime.date:表示日期的类 2.datetime.datetime:表示日期时间的类

随机推荐