0

自動番号を使用していますが、うまくいきません。学籍番号に自動付番が欲しい。

OleDbCommand system = new OleDbCommand();
system.CommandType = CommandType.Text;
system.CommandText = 
"insert into Student(ID, Lastname, Middlename, Firstname, Address, DateofBirth, Birthplace, Contact_number, emailaddress, guardian_name, Guardian_contact) values ('" + txtStudentIDnumber.Text + "','" + txtlastname.Text + "','" + txtfirstname.Text + "','" + 
txtmiddlename.Text + "','" + txtaddress.Text + "','" + txtdateofbirth.Text + "','" + txtbirthplace.Text + "','" + txtcontactnumber.Text + "','" + txtemailaddress.Text + "','" + txtGuardianname.Text + "','" + txtguardiancontact.Text + "')";
system.Connection = mydatabase;



if (MessageBox.Show("Save data?", "Confirm Save", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
4

3 に答える 3

2

まず、次のように ID 列を指定する必要があります。

ここに画像の説明を入力

あなたのコード:

 OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\db.accdb");
            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = string.Format("insert into Student(LastName,...) values('{0}',...)",txtLastName.Text.Trim(),...);
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
于 2012-09-19T07:05:09.293 に答える
2

データベース スキーマまたはエラー メッセージがなければ、問題を特定することは困難です。IDただし、問題はおそらく、自動番号付け (カウンターとも呼ばれる) が有効になっている列に値を挿入しようとしていることが原因です。変化する:

system.CommandText = "insert into Student(ID, Lastname, ..."; // And so on

system.CommandText = "insert into Student(Lastname, ..."; // And so on

また、SQL インジェクションやエスケープの問題を回避するために、連結を使用するのではなく、クエリをパラメーター化されたクエリ (文字列 ')' の後の 's'. unclosed quote mark の近くの不適切な構文で言及されているものなど) に変更することを検討してください。

于 2012-09-19T06:39:25.240 に答える
0

ID列は(データベース内の)IDになるように設定する必要があり、挿入から省略する必要があります。

http://forums.asp.net/t/1492834.aspx/1

アップデート

あなたの StudentIdNumber は州が発行した実際の ID 番号であると思われます。探しているのは ID フィールドです。

テーブルの作成に使用したテーブル デザイナーを使用するか、スクリプトを使用して、ID 列をテーブルに追加する必要があります。

CREATE TABLE Student(
   ID int identity, 
   StudentIdNo varchar(10), 
   Lastname varchar(10), 
   Firstname varchar(10), 
   Middlename varchar(10), 
   CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID)
)

これが挿入ステートメントの形式になります。ID フィールドがないことに注意してください。

"INSERT INTO Student (StudentIdNo, Lastname, Firstname, Middlename) VALUES (?)"

...あなたの場合、IDフィールドを追加した後

   OleDbCommand comm = new OleDbCommand();
   comm.CommandType = CommandType.Text;

   comm.CommandText = 
       @"insert into Student(StudentIdNo, Lastname, Firstname, Middlename) 
                     values (@StudentIdNo, @Lastname, @Firstname, @Middlename)"; 

   comm.Parameters.AddWithValue("@StudentIdNo", txtStudentIdNo.Text);
   comm.Parameters.AddWithValue("@Lastname", txtlastname.Text);
   comm.Parameters.AddWithValue("@Firstname", txtfirstname.Text);
   comm.Parameters.AddWithValue("@Middlename", txtmiddlename.Text);

   comm.Connection = mydatabase;
于 2012-09-19T06:41:18.607 に答える