0

こんにちは、私は現在、ローカルの .mdf データベースでレッスンの詳細を調べようとしていますが、それができないようです。この問題が数週間続いており、本当に解決する必要があるので、何か助けがあれば教えてください。とても有難い。以下のフォームのコードを含めます。よろしくお願いします。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim Session As String
    Session = txtSession.text

    Dim con As New SqlConnection
    Dim inscmd As New SqlCommand
    con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("RoomBookingSystem.My.MySettings.Database1ConnectionString1").ConnectionString
    Try
        Using cn As New SqlConnection(con.ConnectionString)
            con.Open()

            Dim ParamInitial As New SqlParameter
            ParamInitial.ParameterName = ("@StaffInitials")
            ParamInitial.Value = lblStaffInitials.Text.Trim()
            inscmd.Parameters.Add(ParamInitial)

            Dim ParamWeek As New SqlParameter
            ParamWeek.ParameterName = ("@Week")
            ParamWeek.Value = lblWeek.Text.Trim
            inscmd.Parameters.Add(ParamWeek)

            Dim ParamPeriod As New SqlParameter
            ParamPeriod.ParameterName = ("@Period")
            ParamPeriod.Value = lblPeriod.Text.Trim
            inscmd.Parameters.Add(ParamPeriod)

            Dim ParamDay As New SqlParameter
            ParamDay.ParameterName = ("@Day")
            ParamDay.Value = lblDay.Text.Trim
            inscmd.Parameters.Add(ParamDay)

            Dim ParamSubject As New SqlParameter
            ParamSubject.ParameterName = ("@Subject")
            ParamSubject.Value = lblSubject.Text.Trim
            inscmd.Parameters.Add(ParamSubject)

            Dim ParamYearGroup As New SqlParameter
            ParamYearGroup.ParameterName = ("@YearGroup")
            ParamYearGroup.Value = lblYear.Text.Trim
            inscmd.Parameters.Add(ParamYearGroup)

            Dim ParamNumberPupils As New SqlParameter
            ParamNumberPupils.ParameterName = ("@NumberOfPupils")
            ParamNumberPupils.Value = lblNoOfPupils.Text.Trim
            inscmd.Parameters.Add(ParamNumberPupils)

            Dim ParamControlledAssesment As New SqlParameter
            ParamControlledAssesment.ParameterName = ("@ControlledAssesment")
            ParamControlledAssesment.Value = lblControlledAssesment.Text.Trim
            inscmd.Parameters.Add(ParamControlledAssesment)

            Dim ParamRoom As New SqlParameter
            ParamRoom.ParameterName = ("@Room")
            ParamRoom.Value = lblRoom.Text.Trim
            inscmd.Parameters.Add(ParamRoom)

            Dim ParamSession As New SqlParameter
            ParamSession.ParameterName = ("@Session")
            ParamSession.Value = txtSession.Text.Trim
            inscmd.Parameters.Add(ParamSession)

            inscmd.CommandText = "INSERT INTO Booking (Week, Day, Period, Subject, YearGroup, StaffInitials, NumberOfPupils, Session, Room, ControlledAssesment)VALUES (@Week,@Day,@Period,@Subject,@YearGroup,@StaffInitials,@NumberOfPupils,@Session,@Room,@ControlledAssesment)"
            'inscmd.CommandText = "INSERT INTO Booking (Week, Day, Period, Subject, YearGroup, StaffInitials, NumberOfPupils, Session, Room, ControlledAssesment)VALUES ('B','Monday',5,'Politics','U6','JAGG',5,'5','LIT','False')"
            Print(inscmd.CommandText)
            inscmd.Connection = con
            inscmd.ExecuteNonQuery()
            con.Close()
            inscmd.Parameters.Clear()
        End Using
        ' Catch ex As Exception
        '   MsgBox("" & ex.Message)
        'if there is an error it will go here (can use Msgbox or label)
    Finally
        con.Close()
    End Try
    MsgBox("Your Booking Has Been Made Successfully")
    Clicky = False
    MainViewForm.btnBackToBooking.Visible = False
    FormView.Show()
    Me.Hide()
    con.Close()
End Sub
4

2 に答える 2

1

上記の例には2つの挿入コマンドがあります。コメントアウトされたコマンドは、文字列ではなく数値として扱われる 2 つの値を示しています。
パラメーターを使用するコマンド テキストを使用しますが、準備されたパラメーターはすべて文字列データ型に設定されます (データ型を設定しないため、DbType プロパティがデフォルトで NVarChar に設定されます) おそらく、これは実行時に表示される正確なエラー メッセージです。挿入コマンド

次のことを試すことができます。

   Using cn As New SqlConnection(con.ConnectionString)
        con.Open()
        inscmd.Parameters.AddWitValue("@StaffInitials", lblStaffInitials.Text.Trim())
        inscmd.Parameters.AddWithValue("@Week", lblWeek.Text.Trim)
        inscmd.Parameters.AddWithValue("@Period", Convert.ToInt32(lblPeriod.Text.Trim))
        inscmd.Parameters.AddWithValue("@Day",lblDay.Text.Trim)
        inscmd.Parameters.AddWithValue("@Subject", lblSubject.Text.Trim)
        inscmd.Parameters.AddWithValue("@YearGroup", lblYear.Text.Trim)
        inscmd.Parameters.AddWithValue("@NumberOfPupils", Convert.ToInt32(lblNoOfPupils.Text.Trim))
        inscmd.Parameters.AddWithValue("@ControlledAssesment", lblControlledAssesment.Text.Trim)
        inscmd.Parameters.AddWithValue("@Room",lblRoom.Text.Trim)
        inscmd.Parameters.AddWithValue("@Session", txtSession.Text.Trim)

        inscmd.CommandText = "INSERT INTO Booking ([Week], [Day], [Period], [Subject], " +
                             "[YearGroup], [StaffInitials],[NumberOfPupils],[Session], " + 
                             "[Room],[ControlledAssesment]) "+
                             "VALUES " + 
                             "(@Week,@Day,@Period,@Subject,@YearGroup,@StaffInitials," +
                             "@NumberOfPupils,@Session,@Room,@ControlledAssesment)"
        inscmd.Connection = con
        inscmd.ExecuteNonQuery()
        inscmd.Parameters.Clear()
    End Using

AddWithValueメソッドを使用してDbType、追加された値から派生したプロパティを持つパラメーターを暗黙的に作成しました。したがって、文字列を値として追加すると、パラメータには が含まれますがDbType.NVarchar、整数を設定すると DbType は になりますDbType.Int。もちろん、これは上記のすべてのフィールドが と を除いて NVarChar 型であることを前提としていPeriodますNumberOfPupils。これが当てはまらない場合は、適切な変換をパラメーターに追加する必要があります

EDIT:確かではありませんが、DAYも予約済みのキーワードだと思います。列名を角かっこでカプセル化することをお勧めします

于 2013-01-25T11:58:54.583 に答える
1

私が知る限り、問題はデータベースの場所にあります。

プログラムがデバッグされると、データベースのコピーがbin/debug フォルダー内に配置されます。ここを調べると、コピーが表示され、コードは元のデータベースではなくこのデータベースに直接 アクセスします ([すべてのファイルを表示] をクリックすると、 bin/debug ファイルに移動し、データベース エクスプローラーで開くと、最後のデバッグ/実行で推定されたデータを確認できます)

これを修正するには、次のことを行う必要があります。

接続文字列

 con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("RoomBookingSystem.My.MySettings.Database1ConnectionString1").ConnectionString

前述の bin フォルダー内のデータベースに接続します。

app.configファイルに移動して、データベースの特定の場所を見つけ、これを接続文字列に使用する必要があります。これにより、データベースのコピー以外からデータを挿入/更新できます。

于 2013-02-09T15:26:26.180 に答える