Я пытаюсь вставить новый DataRow (локально хранится в DataSet) в таблицу доступа с C #.Таблица также создается этим приложением и имеет 3 столбца:
ID
(целое число, первичный ключ, Required
установлено на No
, хотя я установил его в качестве первичного ключа) Name
(строка) Money
(int)
Мой текущий код выглядит так:
OleDbConnection con = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter da;
DataSet ds = new DataSet();
DataView dv = new DataView();
DataRow row;
string Con = @"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=";
string path = "V:\\ProjectProgress\\Test.mdb";
con.ConnectionString = Con + path;
if (con.State == ConnectionState.Closed)
{
con.Open();
}
cmd.Connection = con;
cmd.CommandText = "SELECT ID, Name, Money FROM Test";
da = new OleDbDataAdapter(cmd);
da.TableMappings.Add("Table", "Test");
da.Fill(ds, "Test");
ds.Tables["Test"].Columns[0].AutoIncrement = true;
ds.Tables["Test"].Columns[0].AutoIncrementSeed = -1;
ds.Tables["Test"].Columns[0].AutoIncrementStep = -1;
dv.Table = ds.Tables["Test"];
row = ds.Tables["Test"].NewRow();
row["Name"] = "Huber";
row["Money"] = 100;
ds.Tables["Test"].Rows.Add(row);
string strOLE = "INSERT INTO Test ([Name], [Money]) Values(@Name, @Money)";
OleDbCommand cmdi = new OleDbCommand(strOLE, con);
cmdi.Parameters.Add("@Name", OleDbType.VarChar, 25, "Name");
cmdi.Parameters.Add("@Money", OleDbType.Integer, 4, "Money");
da.InsertCommand = cmdi;
da.Update(ds.Tables["Test"]);
con.Close();
КогдаОбновление Я всегда получаю
Индекс или первичный ключ не может содержать нулевое значение
Ошибка.
Установка значения Required
дляСтолбец ID
в Yes
, выдаст
Индекс или первичный ключ не может содержать нулевое значение
Ошибка.
Как я могупозвольте Access назначить правильный первичный ключ и как мне вернуть новое значение в мой набор данных?
Использование SCOPE_IDENTITY()
невозможно в Access, насколько я знаю, и найдено на некоторых форумах.
(Работа с Visual C # Express 2010, Access 2003)