2

次のようなレコードを追加しています。

    Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb")
    Dim odbconBanking As New OleDbConnection _
             ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=" + pathString)
    Dim sql As String
    sql = "INSERT INTO tblUsers ( FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _
              " VALUES ('" & firstName & "', '" & lastName & "', '" & address & _
            "', '" & city & "', '" & province & "', '" & zip & "', '" & phone & "', '" & username & "', '" & password & "');"
    odbconBanking.Open()
    Dim cmd As New OleDbCommand(sql, odbconBanking)
    cmd.ExecuteNonQuery()
    odbconBanking.Close()

主キーは、UserID と呼ばれる自動付番フィールドです。では、挿入したレコードの主キーを取得するにはどうすればよいでしょうか。

ありがとう。

4

5 に答える 5

5

パラメータ化されたクエリは次のようになると思います。

Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb")
Dim odbconBanking As New OleDbConnection _
     ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
     "Data Source=" + pathString)
Dim sql As String
sql = "INSERT INTO tblUsers ( FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _
      " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
odbconBanking.Open()
Dim cmd As New OleDbCommand(sql, odbconBanking)

//Add Params here
cmd.Parameters.Add(new OdbcParameter("@FirstName", firstName))
cmd.Parameters.Add(new OdbcParameter("@LastName", lastName))
//..etc

//End add Params here

cmd.ExecuteNonQuery()
Dim newcmd As New OleDbCommand("SELECT @@IDENTITY", odbconBanking)
uid = newcmd.ExecuteScalar

odbconBanking.Close()

OdbcライブラリではなくSQLServerライブラリの使用に慣れているため、構文が少しずれている可能性がありますが、これで開始できます。

于 2008-12-06T05:41:08.067 に答える
4

"SELECT @@IDENTITY"挿入直後は、Microsoft.Jet プロバイダーで動作するはずです。

于 2008-12-06T03:57:49.867 に答える
2

あなたは追加したいと思うでしょう

;select scope_identity();

クエリの後に、executeScalar を実行して値を取得します。

また、まったく関係のないことですが、パラメーター化されたクエリを使用するようにコードを変更して、SQL インジェクション攻撃に巻き込まれたり、不適切にエスケープされた文字列が SQL ステートメントに連結されてクラッシュしたりしないようにする必要があります。

于 2008-12-06T03:58:08.773 に答える
2

とった。上記のコードは次のようになります。

    Dim pathString As String = HttpContext.Current.Request.MapPath("Banking.mdb")
    Dim odbconBanking As New OleDbConnection _
             ("Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=" + pathString)
    Dim sql As String
    sql = "INSERT INTO tblUsers ( FirstName, LastName, Address, City, Province, Zip, Phone, UserName, [Password])" & _
              " VALUES ('" & firstName & "', '" & lastName & "', '" & address & _
            "', '" & city & "', '" & province & "', '" & zip & "', '" & phone & "', '" & username & "', '" & password & "');"
    odbconBanking.Open()
    Dim cmd As New OleDbCommand(sql, odbconBanking)
    cmd.ExecuteNonQuery()
    Dim newcmd As New OleDbCommand("SELECT @@IDENTITY", odbconBanking)
    uid = newcmd.ExecuteScalar

    odbconBanking.Close()
于 2008-12-06T04:05:41.927 に答える
1

最も簡単な方法は、コードレベルでuniqueIdentifier値を生成し、それを文字列に追加してサーバーに送信することです。

Dim sql As String, _
    myNewUserId as variant

myNewUserId = stGuidGen    'this function will generate a new GUID value)'
sql = "INSERT INTO tblUsers ( userId, LastName)" & _
      " VALUES ('" & myNewUserId & "','" & LastName);"

stGuidGenguid生成コードの提案はここで確認できます。

このクライアント側の手法は、明確で、クリーンで、便利です。

于 2008-12-06T15:54:54.660 に答える