Не удается вставить значение в столбец в файле. dbf
фон
В настоящее время я работаю над проектом, который потребует от меня создания локального файла .dbf, который я должен затем заполнить значением. В настоящее время я могу создать файл .dbf в тестовом каталоге и добавить в него столбец, однако когда я пытаюсь добавить значение в этот столбец, он не позволяет мне этого сделать. Я покажу два блока кода, чтобы показать всю картину того, что я делаю. Первый блок будет рабочим кодом, который представляет собой функцию, создающую файл. dbf, второй блок - это нерабочий код, в котором я пытаюсь добавить значение в столбец.
Проблема
В настоящее время я не могу писать в столбец Public в файле dbf, который я создаю. Когда он входит в Метод executenonquery(); он ошибается и ловится в моем заявлении catch.
рабочий код
public static bool CreateDBF() { try { string dbfDirectory = @"c:\Users\er4505\Desktop\New911"; string connectionString = "Provider=VFPOLEDB;Data Source=" + dbfDirectory; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); OleDbCommand command = connection.CreateCommand(); command.CommandText = "create table CustomProperties(Public C(60))"; command.ExecuteNonQuery(); connection.Close(); } InsertDataIntoDBF(dbfDirectory + "\\CustomProperties.DBF"); return true; } catch (Exception ex) { string viewError = JsonConvert.SerializeObject(ex); return false; << I have a breakpoint here } }
Нерабочий Код
public static bool InsertDataIntoDBF(string path) { try { string strLogConnectionString = "Provider=VFPOLEDB;Data Source=" + path + ";Collating Sequence=machine;Mode=ReadWrite;"; string query = @"INSERT INTO CustomProperties (Public) VALUES (@Public)"; using (OleDbConnection connection = new OleDbConnection(strLogConnectionString)) { OleDbCommand command = new OleDbCommand(query, connection); command.Parameters.AddWithValue("@Public", "True"); connection.Open(); command.ExecuteNonQuery(); connection.Close(); } return true; } catch (Exception ex) { string viewError = JsonConvert.SerializeObject(ex); return false; << breakpoint here } }
Сообщение об ошибке:
{"oledbErrors":[{"Message":"Syntax error.","NativeError":0,"Source":"Microsoft OLE DB Provider for Visual FoxPro","SQLState":""}],"ClassName":"System.Data.OleDb.OleDbException","Message":"Syntax error.","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":" at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)\r\n at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)\r\n at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()\r\n at CasewareIntegrationWebApi.Services.DatabaseServices.InsertDataIntoDBF(String path) in C:\\Users\\er4505\\Desktop\\Engagement Retival Util\\CasewareIntegrationWebApi\\CasewareIntegrationWebApi\\Services\\DatabaseServices.cs:line 88","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":"8\nExecuteCommandTextErrorHandling\nSystem.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\nSystem.Data.OleDb.OleDbCommand\nVoid ExecuteCommandTextErrorHandling(System.Data.OleDb.OleDbHResult)","HResult":-2147217900,"Source":"Microsoft OLE DB Provider for Visual FoxPro","WatsonBuckets":null}
Что я уже пробовал:
Я пробовал различные примеры, которые я смотрел в интернете, и ни один из них, казалось, не работал.
[no name]
Вы просто должны выяснить, какое исключение выбрасывается.
erick manuel
да, я только что опубликовал ошибку, которую получаю, похоже, что это синтаксическая ошибка, однако я могу найти синтаксическую ошибку, которая ему не нравится.
[no name]
Ну есть только одно место это может быть
строка запроса = @"вставить в CustomProperties (общественного) значения (@публичных)";
наверное, так и должно быть
string query = @ " INSERT INTO CustomProperties (Public) VALUES (?)";
erick manuel
Да, вы правы, я нашел хороший пример и опубликовал ответ. Спасибо