使用參數化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 联系我们: