ADO.NET, MS Access
От: _Sphinx_ Россия http://www.rogov.su
Дата: 25.02.07 09:12
Оценка:
Всем привет!

Совершаю первые шаги в области изучения ADO.NET. Сразу отмечу — с БД раньше почти не работал, ни с ADO ни с другими технологиями не сталкивался... Отсюда видимо и столько непонимания... MSDN не помогает... Всю ночь его курил

В общем, есть такой вот класс, который должен обеспечивать взаимодействие с таблицей в базе. Пока что там есть только один метод для добавления строки в таблицу. В приниципе из кода все должно быть понятно:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data.Common;
using System.IO;

namespace Index_Database
{
    public class DBIndexEntry
    {
        public string Host = String.Empty;
        public string URL = String.Empty;
        public UInt64 Size = 0;
        public string EntryName = String.Empty;
        public bool IsDirectory = false;
        public string Hash = String.Empty;
        public DateTime TimeIndexed = DateTime.Now;
    }

    public class IndexDatabase
    {
        private DataRow MakeRecord(DBIndexEntry Entry, DataTable Table)
        {
            DataRow Row = Table.Rows.Add(new object[] {Entry.Host, Entry.URL, Entry.EntryName, Entry.Size, Entry.Hash, Entry.IsDirectory, Entry.TimeIndexed});
            return Row;
        }

        private OleDbDataAdapter GetAdapter(string SelectCommand, OleDbConnection Connection)
        {
            OleDbCommand Command = new OleDbCommand(SelectCommand, Connection);
            OleDbDataAdapter Adapter = new OleDbDataAdapter(Command);
            Adapter.InsertCommand = new OleDbCommand("INSERT INTO [Index] (Index.Host, Index.URL, Index.EntryName, Index.Size, Index.Hash, Index.IsDirectory, Index.TimeIndexed) VALUES (?, ?, ?, ?, ?, ?, ?)", Connection);

            return Adapter;
        }

        public void AddIndexEntry(DBIndexEntry Entry)
        {
            OleDbConnection Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""D:\Index.mdb"";Persist Security Info=True");
            Connection.Open();

            try
            {
                OleDbDataAdapter Adapter = GetAdapter("SELECT * FROM [Index]", Connection);
                DataSet Set = new DataSet();
                Adapter.Fill(Set, "Index");
                DataTable IndexTable = Set.Tables["Index"];
                DataRow Row = MakeRecord(Entry, IndexTable);
                Adapter.Update(Set, "Index"); // <<<<-----
            }
            finally
            {
                Connection.Close();
            }
        }
    }
}


Используется база данных Access потому как к SQL Server я даже подключится не смог

В выделенной строке падает с исключением :
System.Data.OleDb.OleDbException was unhandled
  Message="Отсутствует значение для одного или нескольких требуемых параметров."
  Source="Microsoft JET Database Engine"
  ErrorCode=-2147217904
  StackTrace:
       в System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
       в System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
       в System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
       в System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
       в System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
       в Index_Database.IndexDatabase.AddIndexEntry(DBIndexEntry Entry) в D:\Visual Studio 2005\Projects\FTP\Index Database\Class1.cs:строка 52


Пните, плиз, что я не так делаю?
ICQ: 203-009-172
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.