数据库将读取但不会写入

时间:2013-02-06 10:00:28

标签: sql database vb.net visual-studio-2008

我有一个问题,我无法预订Sql server .mdf数据库,但我能够读到它。

没有出现错误信息,我已经尝试了一切我能想到的。任何帮助将受到高度赞赏,并提前感谢! 以下是用于插入命令的代码:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim SQLCode As New SQLCode
    Dim con As New SqlConnection
    Dim cmd As New SqlCommand
    Dim lrd As SqlDataReader
    Dim inscmd As New SqlCommand

    cmd.Parameters.AddWithValue("@StaffInitials", lblStaffInitials.Text.Trim())
    lblStaffInitials.Text = lblStaffInitials.Text
    cmd.Parameters.AddWithValue("@Week", lblWeek.Text.Trim)
    lblWeek.Text = lblWeek.Text
    cmd.Parameters.AddWithValue("@Period", (lblPeriod.Text.Trim))
    lblPeriod.Text = lblPeriod.Text
    cmd.Parameters.AddWithValue("@Day", lblDay.Text.Trim)
    lblDay.Text = lblDay.Text
    cmd.Parameters.AddWithValue("@Subject", lblSubject.Text.Trim)
    lblSubject.Text = lblSubject.Text
    cmd.Parameters.AddWithValue("@YearGroup", lblYear.Text.Trim)
    lblYear.Text = lblYear.Text
    cmd.Parameters.AddWithValue("@NumberOfPupils", (lblNoOfPupils.Text.Trim))
    lblNoOfPupils.Text = lblNoOfPupils.Text
    cmd.Parameters.AddWithValue("@ControlledAssesment", lblControlledAssesment.Text.Trim)
    lblControlledAssesment.Text = lblControlledAssesment.Text
    cmd.Parameters.AddWithValue("@Room", lblRoom.Text.Trim)
    lblRoom.Text = lblRoom.Text
    cmd.Parameters.AddWithValue("@Session", txtSession.Text.Trim)
    txtSession.Text = txtSession.Text

con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings("RoomBookingSystem.My.MySettings.Database1ConnectionString1").ConnectionString
    Try
        Using cn As New SqlConnection(con.ConnectionString)
            con.Open()
            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

    Finally
        con.Close()
    End Try
    MsgBox("Your Booking Has Been Made Successfully")
    Clicky = False
    MainViewForm.btnBackToBooking.Visible = False
    FormView.Show()
    Me.Hide()
End Sub

2 个答案:

答案 0 :(得分:1)

当只需要一个SqlCommand时,您有两个不同的Sql命令。将参数添加到inscmd而不是cmd

所以只需删除此行:

Dim cmd As New SqlCommand

并为其余部分执行此操作:

inscmd.Parameters.AddWithValue("@StaffInitials", lblStaffInitials.Text.Trim())
.....
.....

另外需要注意的是,你不需要这个:

Using cn As New SqlConnection(con.ConnectionString)

更改您的代码:

Try
 con.Open()
 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()

 Catch ex As Exception
     // use message box to read the error (if there is any). or simply read the
     // ex.Message in debuggin mode.
 Finally
     con.Close()
 End Try

顺便说一句,我看不到你在哪里设置这个属性con.ConnectionString。你的连接字符串在哪里?

答案 1 :(得分:1)

据我所知,问题出在数据库位置。

当程序被调试时,数据库副本放在bin / debug文件夹中,如果你在这里查看,你会看到副本,你的代码将直接到这个数据库并且不是原始数据库 (如果单击显示所有文件然后转到bin / debug文件,然后使用数据库浏览器打开,您可以看到上次调试/运行时估算的数据)

要解决此问题,您需要执行以下操作:

您的连接字符串

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

将连接到前面提到的bin文件夹中的数据库。

您需要进入 app.config 文件,找到数据库的具体位置并将其用于连接字符串,这样您就可以从非拷贝中插入/更新数据数据库中。