2013-10-29 49 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

對於被認爲是壞習慣的同一對象,是不是添加了多個初始化?另外,在回發時,它不再顯示從我的數據庫中提取的記錄。 –