使用参数化sql语句新增记录,提示语法错误,如何排查原因?


使用参数化sql语句新增记录,提示语法错误,如何排查原因?

17 个解决方案

#1


能取到sql语句么??能取到  就在sql的IDE中运行,看看哪错了

#2


insert into report(RequestNum,PatientName,PatientSex,PatientRecordNo,SampleType,SampleState,SendDept,SendDoctor,SendDate,PerformDept,ClinicalDiagnosis,Note,LabResult,NormalRefValue,TestingValue,ReportDoc,CheckDoc,ReportDate) values (@RequestNum,@PatientName,@PatientSex,@PatientRecordNo,@SampleType,@SampleState,@SendDept,@SendDoctor,@SendDate,@PerformDept,@ClinicalDiagnosis,@Note,@LabResult,@NormalRefValue,@TestingValue,@ReportDoc,@CheckDoc,@ReportDate)
该语句报语法错误

#3


引用 2 楼 lashengcrh 的回复:
insert into report(RequestNum,PatientName,PatientSex,PatientRecordNo,SampleType,SampleState,SendDept,SendDoctor,SendDate,PerformDept,ClinicalDiagnosis,Note,LabResult,NormalRefValue,TestingValue,ReportDoc,CheckDoc,ReportDate) values (@RequestNum,@PatientName,@PatientSex,@PatientRecordNo,@SampleType,@SampleState,@SendDept,@SendDoctor,@SendDate,@PerformDept,@ClinicalDiagnosis,@Note,@LabResult,@NormalRefValue,@TestingValue,@ReportDoc,@CheckDoc,@ReportDate)
该语句报语法错误

你的   @RequestNum,@PatientName 什么的都不是具体的值,当然报错了。
string.Format("insert into table (.....) values('{0}',{1})",‘123’,1)

#4


引用 1 楼 duanzi_peng 的回复:
能取到sql语句么??能取到  就在sql的IDE中运行,看看哪错了


ado.net参数化sql,只能这么写呀!

如果还这么写string.Format("insert into table (.....) values('{0}',{1})",‘123’,1) ,那不就是拼接sql了吗?不安全呢。

#5


我的数据库是Access,难道是它不支持参数化sql吗?

#6


引用 4 楼 lashengcrh 的回复:
Quote: 引用 1 楼 duanzi_peng 的回复:

能取到sql语句么??能取到  就在sql的IDE中运行,看看哪错了


ado.net参数化sql,只能这么写呀!

如果还这么写string.Format("insert into table (.....) values('{0}',{1})",‘123’,1) ,那不就是拼接sql了吗?不安全呢。

嗯,你给参数赋值了么??
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlparameter(v=vs.110).aspx

#7


贴出完整的异常提示,包括 InnerExcption属性。不要随便说一句“语法错误”。

另外,你要真正去查一下你写的代码确实符合 Jet-sql 的语法,不要拿别的关系数据库(例如t-sql)的语法直接套用。

#8


引用 5 楼 lashengcrh 的回复:
我的数据库是Access,难道是它不支持参数化sql吗?


贴出调试信息,有你代码的上下文(知道你怎样使用参数),看得清楚异常信息(包括InnerExcetion)。

#9


引用 8 楼 sp1234 的回复:
Quote: 引用 5 楼 lashengcrh 的回复:

我的数据库是Access,难道是它不支持参数化sql吗?


贴出调试信息,有你代码的上下文(知道你怎样使用参数),看得清楚异常信息(包括InnerExcetion)。


#10


引用 6 楼 duanzi_peng 的回复:
Quote: 引用 4 楼 lashengcrh 的回复:

Quote: 引用 1 楼 duanzi_peng 的回复:

能取到sql语句么??能取到  就在sql的IDE中运行,看看哪错了


ado.net参数化sql,只能这么写呀!

如果还这么写string.Format("insert into table (.....) values('{0}',{1})",‘123’,1) ,那不就是拼接sql了吗?不安全呢。

嗯,你给参数赋值了么??
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlparameter(v=vs.110).aspx

肯定赋值了。

#11


数据库里的字段都是255长度的varchar么?

#12


引用 11 楼 hrabeyond 的回复:
数据库里的字段都是255长度的varchar么?



是的,access数据库建库时,文本类型的字段都是默认255,没改过。

#13


引用 9 楼 lashengcrh 的回复:
Quote: 引用 8 楼 sp1234 的回复:

Quote: 引用 5 楼 lashengcrh 的回复:

我的数据库是Access,难道是它不支持参数化sql吗?


贴出调试信息,有你代码的上下文(知道你怎样使用参数),看得清楚异常信息(包括InnerExcetion)。




唉,Jet 的提示太少。如果放到SQL Server,它会给你至少指出哪一个字符附近的语法有错。

看看是不是少了两个空格符号。

你试试把参数缩少成1、2个,看看报不报错。

你试试 吧 @xxx 变成问号。其实在参数中给出名字,没用。Ole根本不是按照名字的顺序。 http://msdn.microsoft.com/zh-cn/library/system.data.oledb.oledbparameter(v=vs.110).aspx

#14


在上面的msdn文档中你可以看到“OLE DB.NET Framework 数据提供程序使用标有问号 (?) 的定位参数,而不使用命名参数”

而且它给出的例子也是使用?号的!

#15


最近我也写连Access的SQL好蛋疼,不过还好弄好了,

你试试在nsert into report( [RequestNum],PatientName,PatientSex,PatientRecordNo,SampleType,SampleState,SendDept,SendDoctor,SendDate,PerformDept,ClinicalDiagnosis,Note,LabResult,NormalRefValue,TestingValue,ReportDoc,CheckDoc,ReportDate) values (@RequestNum,@PatientName,@PatientSex,@PatientRecordNo,@SampleType,@SampleState,@SendDept,@SendDoctor,@SendDate,@PerformDept,@ClinicalDiagnosis,@Note,@LabResult,@NormalRefValue,@TestingValue,@ReportDoc,@CheckDoc,@ReportDate)

加上 [ ],可能是你表中的栏位存在关键字~

#16


引用 14 楼 sp1234 的回复:
在上面的msdn文档中你可以看到“OLE DB.NET Framework 数据提供程序使用标有问号 (?) 的定位参数,而不使用命名参数”

而且它给出的例子也是使用?号的!


我把参数只保留11个,sql语句正常通过。当新增一个参数时就报错,检查了第12个参数,传入的值是空字符串,应该没有问题呀?搞不懂了。

#17


引用 15 楼 superior_yong 的回复:
最近我也写连Access的SQL好蛋疼,不过还好弄好了,

你试试在nsert into report( [RequestNum],PatientName,PatientSex,PatientRecordNo,SampleType,SampleState,SendDept,SendDoctor,SendDate,PerformDept,ClinicalDiagnosis,Note,LabResult,NormalRefValue,TestingValue,ReportDoc,CheckDoc,ReportDate) values (@RequestNum,@PatientName,@PatientSex,@PatientRecordNo,@SampleType,@SampleState,@SendDept,@SendDoctor,@SendDate,@PerformDept,@ClinicalDiagnosis,@Note,@LabResult,@NormalRefValue,@TestingValue,@ReportDoc,@CheckDoc,@ReportDate)

加上 [ ],可能是你表中的栏位存在关键字~


谢谢,是Note字段名问题,加【】后解决。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: