2012-02-08 3 views
5

У меня есть следующий код в asp.net:Как вставить в DBF файл (Foxpro)

using (OleDbCommand command = dbConnW.CreateCommand()) 
{ 
    string CreateTableK = null; 
    CreateTableK += "Create Table DSKKAR00 (DSK_ID c(10),DSK_KIND N(1),MON_PYM C(3))"; 
    OleDbCommand cmdCreateTable = new OleDbCommand(CreateTableK, dbConnW); 
    cmdCreateTable.ExecuteNonQuery(); 
    System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
    sb.Append(WorkRoomNo + ","); 
    sb.Append("1,"); 
    sb.Append(","); 
    OleDbCommand cmd3 = new OleDbCommand("Insert into DSKKAR00 (DSK_ID,DSK_KIND,MON_PYM) Values (" + sb.ToString() + ")", dbConnW); 
    cmd3.ExecuteNonQuery(); 

Но я следующее сообщение об ошибке:

Syntax error

+0

I Think Для После Адресс В строке ....... помогите мне пожалуйста –

+0

WorkRoomNo постоянен Integer –

ответ

7

В дополнение к тому, что предложил Крис, вы начинаете свой CREATE TABLE со строковой переменной NULL, а затем делаете + =. Из того, что я помню, NULL + = "anystring" останется нулевым значением ... Возможно, вы тоже рухнете.

Несмотря на то, что VFP не очень подходит SQL-инъекции, как и другие двигатели SQL, его хорошая привычка делать параметризацию. Когда вы это сделаете, используйте «?» как место-держатель для значения, которое вы хотите вставить, и добавить параметры в той же последовательности последовательности, что и «?» представлять.

string CreateTableK = 
    "Create Table DSKKAR00 (DSK_ID c(10),DSK_KIND N(1),MON_PYM C(3))";  

OleDbCommand cmdCreateTable = new OleDbCommand(CreateTableK, dbConnW); 
cmdCreateTable.ExecuteNonQuery();  

string MyInsert = 
    "insert into DSKKAR00 (dsk_id, dsk_kind, mon_pym) values (?, ?, ?)"; 
OleDbCommand cmd3 = new OleDbCommand(MyInsert, dbConnW); 
cmd3.Parameters.AddWithValue("parmSlot1", WorkRoomNo); 
cmd3.Parameters.AddWithValue("parmSlot2", 1); 
cmd3.Parameters.AddWithValue("parmSlot3", 'tst'); // or whatever variable to put 
cmd3.ExecuteNonQuery(); 
+0

Tanx ............. Veryyyy –

3

Во-первых, в любое время у вас есть ошибка, как правило, лучше всего отправить сообщение сообщение об ошибке.

Кроме того, при попытке отладки проблемы запроса вы должны испустить фактический запрос, отправляемый на ваш сервер/базу данных, и проверить его. Таким образом, вы можете найти различные проблемы, такие как слишком много запятых.

Говоря о том, что, глядя на ваш код, вы объединяете строку, и похоже, что у вас слишком много запятых.

излучаемого запрос выглядит это будет:

insert into DSKKAR00(DSK_ID, DSK_KIND, MON_PYM) VALUES(X,1, ,) 

где X является значением переменной WorkRoomNo.

Очевидно, что это недопустимый синтаксис и приведет к ошибке, которую вы видели. В запятых указывается, что передано 4 значения, но запрос на вставку идентифицирует только три столбца.

Следующая проблема связана с определениями столбцов. Первый столбец этой таблицы - c (10); третий - с (3). Я немного ржавый, но разве это не поля персонажей?

Если да, то вам нужно настроить строку строитель, чтобы добавить соответствующие кавычки вокруг значений ...

Что приводит нас к окончательным проблемам: Не используйте Струнный concatentation для построения запросов. Использовать Parameterized queries

Смежные вопросы