1

ASP.NetVBWebアプリケーションを開発しています

アプリケーションにはGridView、作成したデータブルのユーザーテーブルのレコードを表示するが含まれています。データベースはSQLサーバーデータベースです。

以下のコードは、データを1つのテーブルに挿入し、組み込み関数@@Identityを使用して、テーブルから最後に追加されたレコードID(tt_idtrainingTblを挿入し、そのレコードIDをに挿入しuserAssessmentTblます。userAssessmentTbl2番目のテーブルにIDを追加すると正常に機能します。

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim lblUsr2 As Control = FindControlRecursive(MultiTabs, "txtUsr")
        Dim strQuery As String
        Dim cmd As SqlCommand

        strQuery = "Insert into trainingTbl(s_id, t_date, EditorId, wa_id, st_id) values(@s_id , @t_date, @EditorId, @wa_id, @st_id  ) Insert into userAssessmentTbl(tt_id, UserId) values(@@Identity, @UserId)"

        cmd = New SqlCommand(strQuery)

        cmd.Parameters.AddWithValue("@s_id", DDLCourse.Text)
        cmd.Parameters.AddWithValue("@t_date", Convert.ToDateTime(txtDate.Text))
        cmd.Parameters.AddWithValue("@EditorId", User.Identity.Name.ToString())
        cmd.Parameters.AddWithValue("@st_id", myLblStation.Value().ToString)
        cmd.Parameters.AddWithValue("@wa_id", myLblWatch.Value().ToString)
        cmd.Parameters.AddWithValue("@UserId", lblUsr2.UniqueID.ToString)
        InsertUpdateData(cmd)
    End Sub

私が抱えている問題は、データベースにからを挿入する方法に集中しているようですuniqueidenifierGridViewuserAssessmentTbl

GridView1そして、どのように、ループを使用して、そのGridview( )からのUserIdレコードをuserAssessmentTbl、からのループIDとともにテーブルに挿入できると思います@@Identity

挿入パラメーターのこの部分は正しくないようです。

cmd.Parameters.AddWithValue("@UserId", lblUsr2.UniqueID().ToString)

そして、私が遭遇したエラーは次のとおりです。'文字列からuniqueidentifierに変換するときに変換に失敗しました。'

私もこのように試しました:

cmd.Parameters.AddWithValue("@UserId", SqlDbType.UniqueIdentifier).Value().ToString()

そして、私はエラーに遭遇しました:'オペランドタイプの衝突:intはuniqueidentifierと互換性がありません'

qusetionは、DataTypeがUniqueidentifierであるSQL DBに文字列を挿入する方法に少し変更されましたか?

どんな助けでも本当にありがたいです。

4

1 に答える 1

1

まず第一に:

@@IDENTITY 現在の接続に対して最後に作成されたIDを返しますが、必ずしもテーブルに最近追加された行のIDを返す必要はありません。最近追加された行のIDを返すために常に使用します。 SCOPE_IDENTITY()


第二に、あなたの質問に答えるために:

SQLタイプUniqueidentifierとCLRタイプはGuid一致しています。

したがって、パラメータとして渡す代わりに、文字列値"@UserId"からを作成する必要があります。Guid

Dim userID As Guid = New Guid(lblUsr2.UniqueID.ToString)
于 2012-06-24T17:08:43.970 に答える