0

次のテキストボックスを持ち、グリッドビューに表示される Windows フォームがあります。アプリケーションは、C# を使用して Access データベースに接続されています。

Companyid (autonumber)
CompanyName(ショートテキスト)
TypeofCompany(ショートテキスト)

オートナンバー型フィールドを生成して、INSERT ステートメントでそれ自体を更新するにはどうすればよいですか?

例:C001、C002、C003、C004.....

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Shrenik_Salguna\Desktop\final.accdb;
        Persist Security Info=False;");
        con.Open();

        OleDbCommand cmd = new OleDbCommand(@"INSERT INTO info
                     ([Name of Company], [Type of Company]) VALUES('"+textBox1.Text+"','" + textBox2.Text + ")", con);
        cmd.ExecuteNonQuery();
        con.Close();
4

2 に答える 2

2

[Companyid] がAutoNumberAccess テーブルのフィールドである場合、そのフィールドは INSERT ステートメントに含めません。これは、Access データベース エンジンが処理するからです。

「C001」、「C002」などを含む独自の「自動インクリメント」フィールドを作成することも考えられますが、すでに trueAutoNumberフィールドがある場合は、わざわざする必要はありません。テーブルの各行には既に一意の列があり、"Cnnn" のような識別子を取得したい場合は、次の VBA 式と同等のものを使用するだけで、C# で簡単に実行できます。

"C" & Format([Companyid], "000")
于 2013-06-20T11:05:03.920 に答える
0

autoNumberフィールドを使用してテーブルを作成する方法は次のとおりです。

        ADOX.Catalog cat = new ADOX.Catalog();
        ADOX.Table table = new ADOX.Table();
        ADOX.Key tableKey = new Key();
        ADOX.Column col = new Column();

        String SecurityDBConnection = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}\\{1};", value, SecurityDBName);

        // Define column with AutoIncrement features
        col.Name = "ID";
        col.Type = ADOX.DataTypeEnum.adInteger;


        // Define security table
        table.Name = "Security";
        table.Columns.Append(col);    // default data type is text[255]
        table.Columns.Append("Username", ADOX.DataTypeEnum.adVarWChar, 255);
        table.Columns.Append("Password", ADOX.DataTypeEnum.adVarWChar, 255);
        table.Columns.Append("Engineer", ADOX.DataTypeEnum.adBoolean);
        table.Columns.Append("Default", ADOX.DataTypeEnum.adBoolean);

        tableKey.Name = "Primary Key";
        tableKey.Columns.Append("ID");
        tableKey.Type = KeyTypeEnum.adKeyPrimary;

        // Add security table to database
        cat.Create(SecurityDBConnection);

        // Must create database file before applying autonumber to column
        col.ParentCatalog = cat;
        col.Properties["AutoIncrement"].Value = true;

        cat.Tables.Append(table);

        // Now, try to connect to cfg file to verify that it was created successfully
        ADODB.Connection con = cat.ActiveConnection as ADODB.Connection;
        if (con != null) con.Close();

以下は、 autoNumberフィールドを持つテーブルにレコードを挿入するコードです。autoNumber フィールドは挿入ステートメントで指定されておらず、フィールド名は括弧で囲まれていることに注意してください。

        public void WriteRecord(String sUsername, String sPassword, Boolean boEngineerRole, Boolean boDefaultUser)
       {
        String InsertQry = "Insert into Security([Username], [Password], [Engineer], [Default]) "
            + "values(@UserName, @Password, @Engineer, @Default)";
        using (OleDbConnection connection = new OleDbConnection(SecurityDBConnection))
        {
           using (OleDbCommand command = new OleDbCommand(InsertQry, connection))
           {
               command.CommandType = CommandType.Text;
               command.Parameters.AddWithValue("@UserName", sUsername);
               command.Parameters.AddWithValue("@Password", sPassword);
               command.Parameters.AddWithValue("@Engineer", boEngineerRole);
               command.Parameters.AddWithValue("@DefaultUser", boDefaultUser);
               connection.Open();
               command.ExecuteNonQuery();
           }
        }
    }
于 2013-09-23T18:35:04.067 に答える