Всем привет!
Совершаю первые шаги в области изучения 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
Пните, плиз, что я не так делаю?