问题描述
新手求助。想把书上的例题改下,变成模糊查询,但老是出错,请各位高手拉兄弟一把。ModulemdlDisplaySearchData【查询的类】PublicSubDataBind(ByValconnStrAsString,ByValTableAsString,ByValfrmConntrolAsDataGridView,ByValstrFieldAsString,ByValstrValueAsString)'连接数据库DimcnAsNewOleDb.OleDbConnection(connStr)'打开数据库cn.Open()'设置执行SQL语句DimstrSQL="Select*from"+TableIf(strValue<>"")ThenstrSQL=strSQL+"where"+strField+"like"+strValue(strSQL=strSQL+"where"+strField+"like"+“%”+strValue+“%”)EndIfDimcmdAsOleDb.OleDbCommand=NewOleDb.OleDbCommand(strSQL,cn)cmd.CommandType=CommandType.TextDimdaAsNewOleDb.OleDbDataAdapter()da.SelectCommand=cmd'执行查询命令cmd.ExecuteNonQuery()'填充数据集DimdsAsNewDataSetda.Fill(ds,Table)'设置显示的数据表frmConntrol.DataSource=ds.Tables(Table)EndSubEndModule【控件上的代码】DimconnStrAsString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=g:gsvb1111zr.mdb"dimstrTable,strField,strValueasstringstrTable="产品表"strField="产品代码"strValue="'"+Trim(Me.TextBox1.Text)+"'"(strValue="'%"&Trim(Me.TextBox1.Text)&"%'")mdlDisplaySearchData.DataBind(connStr,strTable,dd,strField,strValue)【错误提示】发生了System.Data.OleDb.OleDbExceptionErrorCode=-2147217900Message="语法错误在查询表达式'产品代码like%'G30'%'中。"Source="MicrosoftJETDatabaseEngine"StackTrace:在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMSdbParams,Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehaviorbehavior,Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehaviorbehavior,Stringmethod)在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()在_11.mdlDisplaySearchData.DataBind(StringconnStr,StringTable,DataGridViewfrmConntrol,StringstrField,StringstrValue)位置G:gsvb1111mdlDisplaySearchData.vb:行号22
解决方案
解决方案二:
SQL语法错误正确构建后的形式应该如下面的select*Fromtablewherefieldnamelike'%G30%'DimstrSQL="Select*from"+TableIf(strValue<>"")ThenstrSQL=strSQL+"where"+strField+"like'%"+strValue+"%'"EndIf
解决方案三:
(strSQL=strSQL+"where"+strField+"like"+“%”+strValue+“%”)==>(strSQL=strSQL+"where"+strField+"like'%"+strValue+"%'")1、SQL語句裏面的字串要用單引號2、SQL語句裏面的符號及關鍵字是WesternPunctuation,“%”這種寫法是識別不了的,應該是"%"。
解决方案四:
发生了System.Data.OleDb.OleDbExceptionErrorCode=-2147217900Message="语法错误在查询表达式'产品代码like%'G30'%'中。"错误不是写的很清楚吗??这样:select*fromtablewhere**like'%'G30'%'是不行的.应该是select*fromtablewhere**like'%G30%'才对.
解决方案五:
多谢楼上各位的指点,将strSQL=strSQL+"where"+strField+"like'%"+strValue+"%'"后,提示出错。发生了System.Data.OleDb.OleDbExceptionErrorCode=-2147217900Message="语法错误(操作符丢失)在查询表达式'产品代码like'%'G307'%''中。"Source="MicrosoftJETDatabaseEngine"StackTrace:在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMSdbParams,Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehaviorbehavior,Object&executeResult)在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehaviorbehavior,Stringmethod)在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()在_11.mdlDisplaySearchData.DataBind(StringconnStr,StringTable,DataGridViewfrmConntrol,StringstrField,StringstrValue)位置G:gsvb1111mdlDisplaySearchData.vb:行号24
解决方案六:
引用4楼zr784的回复:
多谢楼上各位的指点,将strSQL=strSQL+"where"+strField+"like'%"+strValue+"%'"后,提示出错。发生了System.Data.OleDb.OleDbExceptionErrorCode=-2147217900Message="语法错误(操作符丢失)在查询表达式'产品代码like'%'G307'%''中。"Source="MicrosoftJETDatabaseEngine"StackTrace:在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(t…
strSQL=strSQL+"where"+strField+"like'%"+strValue+"%'"改成strSQL="select*from'"&Table&"'where'"&strField&"'like'%"&strValue&"%'"
解决方案七:
将查询条件中的单引号替换为两个单引号strValue改为strValue.replace("'","''")
解决方案八:
最好在程序中设置一个断点,看一下你构造的SQL语句strSQL到底是怎么样的,到你的数据库工具里执行一下就知道问题了。
解决方案:
语法!