新しいDataRow(DataSetにローカルに格納されている)をC#でAccessテーブルに挿入しようとしています。テーブルも、このアプリで作成された3列ありさ: C#(OleDB)でオートインクリメントのプライマリキーで新しいDataRowを挿入
Name
(文字列)ID
(Required
が、私はそれを主キーとして設定したもののNo
に設定されている整数、主キーを、)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();
私は常にNULL値に
エラーを含めることはできません
インデックスまたは主キーを取得しています更新。
Yes
からID
列のRequired
値を設定、
インデックスがスローされますか、主キーはNULL値
エラーを含めることはできません。
私はAccessに正しいプライマリキーを割り当てさせ、新しい値を自分のデータセットに戻す方法を教えてください。
SCOPE_IDENTITY()
を使用することは、私が知っているいくつかのフォーラムでは、アクセスできません。(ビジュアルC#Expressの2010、Access 2003のでの作業)
正シードとステップは何も変更されません - 私はまだ "インデックスまたは主キーがNull値を含むことはできません"エラーを取得します。 私のデータセットからIDを取得するとき(「IDを挿入する([ID]、[名前]、[Money])値(@ ID、@Name、@Money)」)アクセスはこの値をとり、有効なIDなので、主キーがすでに存在する場合はエラーが発生します... – TabulaRasa