2013-10-29 46 views
0

我尝试使用下面的代码将记录插入到我的Access数据库:记录插入到Access数据库产生的空行

<script runat="server"> 
    Dim dbConnection As OleDbConnection 
    Dim dbCommand As OleDbCommand 
    Dim dbReader As OleDbDataReader 
    Dim sqlString As String 

    Sub page_load() 
     Try 
      txtFName.Text = "" 
      txtLName.Text = "" 

      dbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data source=" & Server.MapPath("MyDatabase.accdb")) 
      dbConnection.Open() 

      sqlString = "SELECT * FROM table1 ORDER BY ID" 
      dbCommand = New OleDbCommand(sqlString, dbConnection) 
      dbReader = dbCommand.ExecuteReader() 

      While dbReader.Read() 
       Dim lblName As Label = New Label() 
       lblName.ID = dbReader("ID") 
       lblName.Text = "<b>Name: </b>" & dbReader("F_Name") & " " & dbReader("L_Name") & "<br/><br/>" 
       lblName.EnableViewState = False 
       nameArea.Controls.Add(lblName) 
      End While 

      dbReader.Close() 
     Finally 
      dbConnection.Close() 
     End Try 
    End Sub 

    Sub addToDatabase() 
     Try 
      dbConnection.Open() 
      sqlString = "INSERT INTO table1 (F_Name,L_Name) VALUES (@FName, @LName)" 
      dbCommand.CommandText = sqlString 
      dbCommand.Parameters.AddWithValue("@FName", txtFName.Text) 
      dbCommand.Parameters.AddWithValue("@LName", txtLName.Text) 
      dbCommand.ExecuteNonQuery() 
     Finally 
      dbConnection.Close() 
     End Try 
    End Sub 
</script> 

在下面我的ASP代码,我有两个文本框持有first name和last名字,以及一个按钮,点击时会调用addToDatabase,和一个占位符,以显示每个记录从数据库中抽取:

<asp:TextBox ID="txtFName" runat="server" /> 
<asp:TextBox ID="txtLName" runat="server" /> 
<asp:Button ID="btnSubmit" Text="Submit" OnClick="addToDatabase" runat="server" /> 
<br /> 
<asp:PlaceHolder ID="nameArea" runat="server" /> 

我访问数据库中包含的表名为table1,有一个ID,F_Name和L_Name场,其DataType分别为AutoNumber,Text和Text 。

我的问题是,当我点击btnSubmit时,它将F_Name和L_Name中的空白记录添加到我的数据库中,而不是TextBox中的内容,并且继续在每次浏览器刷新时添加空白记录。

这是怎么回事?

+0

希望看到您的'Page_Load'代码,请发布。 – unlimit

+0

为您编辑它。 –

回答

0

我搬来搬去我的代码,增加了一个新的子,将得到的名字,然后叫该方法在最初的Page_Load,并呼吁addToDatabase后。我把所有其他的东西放在asp下面。

Dim dbConnection As OleDbConnection 
Dim dbCommand As OleDbCommand 
Dim dbReader As OleDbDataReader 
Dim sqlString As String 

Sub page_load() 
    dbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;data source=" & Server.MapPath("MyDatabase.accdb")) 
    dbCommand = New OleDbCommand("", dbConnection) 

    If Not Page.IsPostBack Then 
     showNames() 
    End If 
End Sub 

Sub showNames() 
    Try 
     dbConnection.Open() 

     sqlString = "SELECT * FROM table1 ORDER BY ID" 
     dbCommand.CommandText = sqlString 
     dbReader = dbCommand.ExecuteReader() 

     While dbReader.Read() 
      Dim lblName As Label = New Label() 
      lblName.ID = dbReader("ID") 
      lblName.Text = "<b>Name: </b>" & dbReader("F_Name") & " " & dbReader("L_Name") & "<br/>" 
      lblEntry.EnableViewState = False 
      nameArea.Controls.Add(lblName) 
     End While 

     dbReader.Close() 
    Finally 
     dbConnection.Close() 
    End Try 
End Sub 

Sub addToDatabase(src As Object, args as EventArgs) 
    Try 
     dbConnection.Open() 
     sqlString = "INSERT INTO table1 (F_Name,L_Name) VALUES (@FName, @LName)" 
     dbCommand.CommandText = sqlString 
     dbCommand.Parameters.AddWithValue("@FName", txtFName.Text) 
     dbCommand.Parameters.AddWithValue("@LName", txtLName.Text) 
     dbCommand.ExecuteNonQuery() 
    Finally 
     dbConnection.Close() 
    End Try 

    showNames() 
End Sub 
0

page_load方法中删除以下行。

 txtFName.Text = "" 
     txtLName.Text = "" 

addToDatabase方法的末尾添加以下内容。然后这将显示页面中的新名称,而无需调用数据库。

Dim lblName As Label = New Label() 
lblName.ID = dbReader("ID") 
lblName.Text = "<b>Name: </b>" & txtFName.Text & " " & txtLName.Text & "<br/><br/>" 
lblName.EnableViewState = False 
nameArea.Controls.Add(lblName) 
+0

当尝试关闭addToDatabase中的dbConnection时,这样做会给我一个System.NullReferenceException。 –

+0

打开'addToDatabase'内部的连接。将'dbConnection.Open()'添加到方法中,将dbConnection = New OleDbConnection(“Provider = Microsoft.ACE.OLEDB.12.0; data source =”&Server.MapPath(“MyDatabase.accdb”))添加到db2Connection.Open()中。 – unlimit

+0

对于被认为是坏习惯的同一对象,是不是添加了多个初始化?另外,在回发时,它不再显示从我的数据库中提取的记录。 –