powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Edit dbf + C#
11 сообщений из 11, страница 1 из 1
Edit dbf + C#
    #38184786
Andry1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброе время суток.

Проблема банальная, но как-то разобраться не могу. Проблема в том что дали мне дбф файл и сказали нужно что бы программа умела открывать, редактировать и создавать новые записи в данном файле.
С открытием файла и отображением его содержимого никаких проблем, а вот на этапе создание новой записи застрял. Не как не могу.
Вот код с помощью которого пытаюсь создать запись:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
        private void addButton_Click(object sender, EventArgs e)
        {
            string command = "INSERT INTO UUZELL.DBF (VN, ND, KOL, NKI, RC, NM, OPER, KOL2, TO) " +
                            "VALUES(@VN, @ND, @KOL, @NKI, @RC, @NM, @OPER, @KOL2, @TO)";

            GetDBFContentsByName(command);
        }

        public void GetDBFContentsByName(string commandText)
        {
            string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\MAT;Extended Properties=dBase IV";
            using (OleDbConnection db = new OleDbConnection(ConnectionString))
            {
                using (OleDbCommand command = db.CreateCommand())
                {
                    command.CommandText = commandText;

                    command.Parameters.AddWithValue("VN", vn.Text);
                    command.Parameters.AddWithValue("ND", nd.Text);
                    command.Parameters.AddWithValue("KOL", kol.Text);
                    command.Parameters.AddWithValue("NKI", nki.Text);
                    command.Parameters.AddWithValue("RC", rc.Text);
                    command.Parameters.AddWithValue("NM", nm.Text);
                    command.Parameters.AddWithValue("OPER", oper.Text);
                    command.Parameters.AddWithValue("KOL2", kol2.Text);
                    command.Parameters.AddWithValue("TO", to.Text);

                    db.Open();
                    command.ExecuteNonQuery();
                }
            }
        }



Во время выполнения вылетает ошибка:


Помогите, в чем проблема (кроме кривых рук=)).
Сам файл так же приаттачил. Заране благодарен.
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38184811
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.DBF - лишнее ?
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38184824
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: TO - может быть из списка зарезервированных словей для JetSQL...? можно попробовать [TO] или "TO"...
Полистайте гуглу... ломает проверять, а дать "дельный" совет уж больно хотся... аж зубы сводит.. :)
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38184871
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мб это?
[quote MSDN]Поставщик OLE DB .NET не поддерживает именованные параметры для передачи параметров в оператор SQL или хранимую процедуру, вызываемую OleDbCommand, если CommandType установлен в значение Text.В этом случае в качестве заполнителя необходимо использовать вопросительный знак (?). Например:

SELECT * FROM Customers WHERE CustomerID = ?

Поэтому порядок, в котором объекты OleDbParameter добавляются в коллекцию OleDbParameterCollection, должен соответствовать позиции заместителя (знака вопроса) для данного параметра в тексте команды.
quote]

Ссылка
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38184943
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andry1,

При добавлении параметров пиши имя параметра с амперсандом.
Ещё меня смущает то, что не указывается тип данных - числа или строки - кто их разберёт?
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38185438
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Седня проверил... В сухом остатке... TO - нужно экранировать... т.е. [TO] . UUZELL.DBF - хоть UUZELL пох.
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38185449
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: Это мои игрища просто тест... может что буде полезно...

cmb.QuotePrefix = "[";
cmb.QuoteSuffix = "]";


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
        static void Main(string[] args)
        {
            string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.;Extended Properties=dBase IV";

            using (OleDbConnection db = new OleDbConnection(ConnectionString))
            {
                using (OleDbCommand command = db.CreateCommand())
                {

                    command.CommandText = @"SELECT VN, ND, KOL, NKI, RC, NM, OPER, KOL2, TO FROM UUZELL";
                    command.CommandType = System.Data.CommandType.Text;

                    db.Open();

                    using (var reader = command.ExecuteReader())
                    {
                        DataTable dt = new DataTable();
                        dt.Load(reader);                    
                    }

                    OleDbCommandBuilder cmb = new OleDbCommandBuilder(new OleDbDataAdapter(command));
                    cmb.QuotePrefix = "[";
                    cmb.QuoteSuffix = "]";


                    var cm = cmb.GetInsertCommand(true);

                    foreach (OleDbParameter pm in cm.Parameters)
                    {
                        switch (pm.OleDbType)
                        {
                            case OleDbType.VarWChar:
                                pm.Value = "";
                                break;
                            case OleDbType.Double:
                                pm.Value = 0;
                                break;
                        }
                    }

                    cm.ExecuteNonQuery();
                }
            }

            Console.ReadKey();
        }

...
Рейтинг: 0 / 0
Edit dbf + C#
    #38186350
Andry1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо большое, завтра проверю советы о результатах отпишусь)
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38186888
Andry1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buserСедня проверил... В сухом остатке... TO - нужно экранировать... т.е. [TO] . UUZELL.DBF - хоть UUZELL пох.

Спасибо большое, помогло, все го лишь надо было экранировать. Предоставляю свой окончательный немного переделанный код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
        private void addButton_Click(object sender, EventArgs e)
        {
            string command = "INSERT INTO UUZELL (VN, ND, KOL, NKI, RC, NM, OPER, KOL2, [TO]) " +
                            "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";

            GetDBFContentsByName(command);
        }

        public void GetDBFContentsByName(string commandText)
        {
            string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _root + ";Extended Properties=dBase IV";
            using (OleDbConnection db = new OleDbConnection(ConnectionString))
            {
                using (OleDbCommand command = db.CreateCommand())
                {
                    command.CommandText = commandText;

                    command.Parameters.Add("VN", OleDbType.Char).Value = vn.Text;
                    command.Parameters.Add("ND", OleDbType.Char).Value = nd.Text;
                    command.Parameters.Add("KOL", OleDbType.Char).Value = kol.Text;
                    command.Parameters.Add("NKI", OleDbType.Char).Value = nki.Text;
                    command.Parameters.Add("RC", OleDbType.Char).Value = rc.Text;
                    command.Parameters.Add("NM", OleDbType.Char).Value = nm.Text;
                    command.Parameters.Add("OPER", OleDbType.Char).Value = oper.Text;
                    command.Parameters.Add("KOL2", OleDbType.Char).Value = kol2.Text;
                    command.Parameters.Add("TO", OleDbType.Char).Value = to.Text;

                    db.Open();
                    command.ExecuteNonQuery();
                }
            }

            this.Close();
        }



Всем большое спасибо =). Тема закрыта.
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38187000
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andry1, ну и ﷲ اكبر :) I hope it will helpful http://office.microsoft.com/en-us/access-help/sql-reserved-words-HP001032249.aspx
Удачи :)
...
Рейтинг: 0 / 0
Edit dbf + C#
    #38189173
Гаджет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, занимаюсь тоже dbf файлом.. стоит такая задача, которую я сам себе поставил для понимания, чтобы потом решить более глобальную.

Есть таблица C:\1.dbf с полями namm и data_obs. Нужно выбрать из этой таблицы выбрать такие, где поле data_obs=01.03.2013 и результат выборки преобразовать в XML. Как реализовать данное действие? Если использовать веб-сервисы, то результат формируется в xml с веб-сервисами разобрался, создал простой для умножения двух чисел, а как с DBF работать не знаю, сам работал только в Фокспро.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Edit dbf + C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]