- Remove From My Forums
-
Question
-
I have one select statement to execute on the access database on the click of a button. when i click on the button i am getting this error «Syntax error (missing operator) in query expression ‘Customer_Name = Summer Terry’.» The code that
i have written is pasted below and also the error log. Can anyone please find and correct the error in my code.using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.OleDb; namespace Cyber_Application { public partial class RegularCustomer : Form { int flag = 0; string currentFile; string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Clients\S V Cyber Cafe\Cyber Application\Cyber Application\param.accdb; Jet OLEDB:Database Password=12345"; public RegularCustomer() { InitializeComponent(); } private void btnOK_Click(object sender, EventArgs e) { string address = ""; string date = ""; string InTime = ""; string OutTime = ""; date = DateTime.Now.ToShortDateString(); address = txtAddress.Text; InTime = txtInHour.Text + ":" + txtInMin.Text + " " + listBoxIn.SelectedItem.ToString(); OutTime = txtOutHour.Text + ":" + txtOutMin.Text + " " + listBoxOut.SelectedItem.ToString(); MessageBox.Show("Your address is:n" + address + "nToday's date is:n" + date + "nYour In Time is:n" + InTime + "nYour Out Time is:n" + OutTime); } private void btnCancel_Click(object sender, EventArgs e) { this.Close(); } private void addCustomers() { OleDbConnection cn = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand("select Customer_Name from Customers", cn); cn.Open(); OleDbDataReader dr = cmd.ExecuteReader(); if (dr != null) { while (dr.Read()) { cBoxCustomers.Items.Add(dr["Customer_Name"]); } } cBoxCustomers.SelectedIndex = 0; } private void RegularCustomer_Load(object sender, EventArgs e) { addCustomers(); btnOK.Enabled = false; btnBrowse.Enabled = false; btnSelectCustomer.Enabled = false; txtName.Enabled = false; txtAddress.Enabled = false; txtContactNo.Enabled = false; txtIdProof.Enabled = false; txtIssuedBy.Enabled = false; } private void cBoxCustomers_SelectedIndexChanged(object sender, EventArgs e) { if (cBoxCustomers.SelectedIndex == 0) { btnSelectCustomer.Enabled = false; } else { btnSelectCustomer.Enabled = true; } } private void btnSelectCustomer_Click(object sender, EventArgs e) { using (OleDbConnection cn = new OleDbConnection(connectionString)) { cn.Open(); string scmd = "select [Customer_Name], [Address], [Contact_No], [Gender], [Issued_By] from Regular_Customers where Customer_Name = " + cBoxCustomers.SelectedItem.ToString(); OleDbCommand cmd = new OleDbCommand(scmd, cn); OleDbDataReader sdr = cmd.ExecuteReader(); while (sdr.Read()) { txtName.Text = sdr[0].ToString(); ; txtAddress.Text = sdr[1].ToString(); txtContactNo.Text = sdr[2].ToString(); if (sdr[3].ToString() == "M") { radioBtnMale.Select(); } if (sdr[3].ToString() == "F") { radioBtnFemale.Select(); } txtIssuedBy.Text = sdr[4].ToString(); } } } } }
The error code is:
System.Data.OleDb.OleDbException was unhandled Message=Syntax error (missing operator) in query expression 'Customer_Name = Summer Terry'. Source=Microsoft Office Access Database Engine ErrorCode=-2147217900 StackTrace: at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader() at Cyber_Application.RegularCustomer.btnSelectCustomer_Click(Object sender, EventArgs e) in E:ClientsS V Cyber CafeCyber ApplicationCyber ApplicationRegularCustomer.cs:line 90 at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at Cyber_Application.Program.Main() in E:ClientsS V Cyber CafeCyber ApplicationCyber ApplicationProgram.cs:line 17 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:
-
Edited by
Monday, September 26, 2011 3:30 AM
-
Edited by
Answers
-
Instead of concatinating a string command, you would be better off using parameters. I’m doing inserts into Access, but the code below should give you a general idea, of how to use parameters. Then you don’t need to worry if you have all the
single quotes in the correct places.using (dal.DBManager db = new dal.DBManager(dal.DataProvider.OleDb, string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}{1};", this.db_Directory, this.db_FileName))) { db.Open(); foreach (DataRow row in dt.Rows) { this.CurCount++; this.TotalCount = (short)(((float)this.CurCount / (float)dt.Rows.Count) * 100); this.StatusMessage = string.Format(Msg, this.CurCount, dt.Rows.Count.ToString(), this.TotalCount.ToString()); db.Command.CommandText = "INSERT INTO [ProgramLanguage Join](ProgramID, LanguageID, AudioFormatID) VALUES(?, ?, ?)"; db.CreateParameters(3); db.AddParameters(0, "ProgramID", Convert.ToInt32(row["ProgramID"])); db.AddParameters(1, "LanguageID", Convert.ToInt16(row["LanguageID"])); db.AddParameters(2, "AudioFormatID", Convert.ToInt16(row["AudioFormatID"])); db.ExecuteNonQuery(CommandType.Text, db.Command.CommandText); worker.ReportProgress(this.TotalCount, StatusMessage); } db.Close(); }
-
Marked as answer by
Martin_Xie
Thursday, September 29, 2011 5:29 AM
-
Marked as answer by
-
enclose the value that you would like to pass with ( ‘ )… as in your code:
« + cBoxCustomers.SelectedItem.ToString();
should be: ‘« + cBoxCustomers.SelectedItem.ToString() +
«‘«;-
Edited by
RoninB
Monday, September 26, 2011 3:38 AM -
Marked as answer by
tapan.desai
Monday, September 26, 2011 6:17 AM
-
Edited by
-
hi Tapan,
please try this:
string scmd = "select [Customer_Name], [Address], [Contact_No], [Gender], [Issued_By] from Regular_Customers where Customer_Name = '" + cBoxCustomers.SelectedItem.ToString()+"'";
Regards, http://shwetamannjain.blogspot.com
-
Proposed as answer by
Shweta Jain (Lodha)
Monday, September 26, 2011 3:41 AM -
Marked as answer by
tapan.desai
Monday, September 26, 2011 6:17 AM
-
Proposed as answer by
Be The First To Get Support Updates
Want to know about the latest technical content and software updates?
Error Message
This message is returned during Interactive Selection on Access GeoDatabase:
There was an error executing the query. General Function Failure [1layer_name] Syntax error (missing operator) in query expression ‘(1layer_name.OBJECTID = 1layer_name_Shape_Index.IndexedObjectId and MaxGx >= 2 and MinGX <= 2 and MaxGY> = 0 and MinGY <= 0)’.
Cause
Personal Geodatabase Access layer features cannot be selected if the name of the layer starts with a number.
Note: Database management systems have different definitions of acceptable characters for object names. Most names must begin with a letter and cannot contain spaces, backslashes, or reserved database management system keywords. Some databases allow special characters such as forward slashes (/), underscores (_), dollar signs ($), dashes (-), dots (.), or mixed cases. Sometimes the database allows you to use special characters or reserved keywords, or force mixed, upper-, or lowercase names if you provide the object name enclosed in delimiters, such as double quotation marks. However, ArcGIS does not delimit object names. Do not create any tables, feature classes, indexes, databases, users*, roles, or other object names that require delimiters if you will be using them with ArcGIS. The object will be created in the database, but you cannot access it from ArcGIS. *SQL Server user names containing special characters are delimited to fully support Active Directory Groups and Windows Authenticated logins; however, ArcGIS does not support user names containing single quotation marks or apostrophes.
Solution or Workaround
Rename the Feature layer to not begin with a number.
Related Information
- What is a personal geodatabase?
Last Published: 7/9/2019
Article ID: 000002818
Shaman_64 1 / 1 / 0 Регистрация: 18.11.2017 Сообщений: 57 |
||||
1 |
||||
26.10.2021, 16:14. Показов 1652. Ответов 9 Метки нет (Все метки)
Всем здравствуйте!
поле в базе данных тип короткий текст, если в форму ввожу номер без скобок и дефисов, то все работает, а вот в формате 375(25)849-80-76 выдает указанную выше ошибку. Надеюсь объяснил понятно. Жду вашей помощи.
__________________
0 |
16930 / 12507 / 3286 Регистрация: 17.09.2011 Сообщений: 20,745 |
|
26.10.2021, 16:28 |
2 |
Shaman_64, используйте параметризованные запросы вместо склеивания строк. Ну и я не знаю чей телефон вы сейчас засветили на весь Интернет, но может не надо?
0 |
1 / 1 / 0 Регистрация: 18.11.2017 Сообщений: 57 |
|
26.10.2021, 17:00 [ТС] |
3 |
Shaman_64, используйте параметризованные запросы вместо склеивания строк. Ну и я не знаю чей телефон вы сейчас засветили на весь Интернет, но может не надо? Это сгенерированный программой номер телефона и реально такого номера нет
0 |
294 / 118 / 33 Регистрация: 06.03.2016 Сообщений: 453 |
|
26.10.2021, 19:45 |
4 |
Shaman_64, сути не меняет. Параметры надо передавать параметрами (гениально…), а не пихать в строку.
0 |
Shaman_64 1 / 1 / 0 Регистрация: 18.11.2017 Сообщений: 57 |
||||
28.10.2021, 12:23 [ТС] |
5 |
|||
Да,спасибо, с этим понятно. Вы уж не судите строго, это курсовая и мне не важно если код кривоват, я только учусь а через две недели надо сдать. Добавлено через 3 минуты
0 |
796 / 579 / 207 Регистрация: 21.02.2019 Сообщений: 2,095 |
|
28.10.2021, 12:30 |
6 |
Shaman_64,
0 |
1 / 1 / 0 Регистрация: 18.11.2017 Сообщений: 57 |
|
28.10.2021, 13:09 [ТС] |
7 |
С запятыми разобрался, теперь появилась другая ошибка System.Data.OleDb.OleDbException: «Отсутствует значение для одного или нескольких требуемых параметров.»
0 |
294 / 118 / 33 Регистрация: 06.03.2016 Сообщений: 453 |
|
28.10.2021, 13:14 |
8 |
Не пинайте пожалуйста, а подскажите в чем может быть проблема Качаете SSMS. Пишете там свои запросы, исправляете на правильные, потом переносите в код. Добавлено через 3 минуты
С запятыми разобрался, теперь появилась другая ошибка System.Data.OleDb.OleDbException: «Отсутствует значение для одного или нескольких требуемых параметров.» Сделайте уже по-человечески. По соседству тем полно, где показано как параметрами передавать. Тогда не будет таких бестолковых ошибок, потому что сами уже запутались где что.
0 |
1 / 1 / 0 Регистрация: 18.11.2017 Сообщений: 57 |
|
28.10.2021, 13:15 [ТС] |
9 |
Вопрос как им пользоваться, да и база у меня на ACCESS
0 |
ipsorokin 294 / 118 / 33 Регистрация: 06.03.2016 Сообщений: 453 |
||||
28.10.2021, 13:28 |
10 |
|||
Вопрос как им пользоваться, да и база у меня на ACCESS Да без разницы какая база. Говорю же тем полно тут. Отличие только в том, что будет использоваться
0 |
I have an Access front end with a SQL backend. I’m trying to add a couple of fields to a form. When I edit the working SQL statement for the Form_Open event and add the LEFT JOIN table I get the following error:
There has been an error.
3075: Syntax error (missing operator) in query expression ‘CS.[SegmentID] = S.[SegmentID] LEFT JOIN DATR_ContractEnviroFee AS CEF ON C.[ContractID] = CEF.[ContractID’.
Source: DAO.Database
Form_InitialFeeHelper.Form_Open
SQL Statement:
Set rst = db.OpenRecordset( _
«SELECT TotalNewSignFee AS NewInstall, OnContactCompanyId, ContractEntryID, » & _
«TotalMonthlyFee AS MonthlyFee, CEF.EnviroFee AS EnviroFeeAmt, CEF.Comment AS EnviroComment » & _
«NoEnviroFee As EnviroFee, Sponsor, TotalInitialFee AS InitialFee, » & _
«S.SegmentCode AS SegmentID, S.RouteName AS ROUTE, C.TotalInitialFeeBilled AS InitialFeeBilled, » & _
«S.DirectionCode AS DIRECTION, S.City AS CITY, S.StateCode, C.AssignedRep AS Rep, » & _
«C.[Free01] AS [Free01], C.[Free24] AS [Free24], C.[Free25] AS [Free25], C.[Disc01] AS [Disc01], » & _
«C.[DiscSF] AS [DiscSF], C.[DiscMF] AS [DiscMF], C.[FreeMonth01] AS [FreeMonth01], » & _
«C.[FreeMonth24] AS [FreeMonth24], C.[GiftCard] AS [GiftCard],» & _
«C.[FreeMonth25] AS [FreeMonth25], C.[Discount01] AS [Discount01], C.[DiscountSignFee] AS [DiscountSignFee], » & _
«C.[DiscountMoFee] AS [DiscountMoFee], C.[GiftCardAmount] AS [GiftCardAmount],» & _
«C.[FreeMonth01_Processed] AS [FreeMonth01_Processed], » & _
«C.[FreeMonth24_Processed] AS [FreeMonth24_Processed], C.[FreeMonth25_Processed] AS [FreeMonth25_Processed], » & _
«C.[Discount01_Processed] AS [Discount01_Processed], C.[DiscountSignFee_Processed] AS [DiscountSignFee_Processed], » & _
«C.[DiscountMoFee_Processed] AS [DiscountMoFee_Processed], C.[GiftCard_Processed] AS [GiftCard_Processed] » & _
«FROM (DATR_Contract AS C INNER JOIN DATR_ContractSegment AS CS ON C.ContractID = CS.ContractID) » & _
«INNER JOIN DAT_Segment AS S ON CS.[SegmentID] = S.[SegmentID] » & _
«LEFT JOIN DATR_ContractEnviroFee AS CEF ON C.[ContractID] = CEF.[ContractID] » & _
«WHERE C.ContractID = » & conId, dbOpenDynaset, dbSeeChanges)
Again, the statement was working fine until I tried to add the DATR_ContractEnviroFee table into the mix.