2015-07-13 69 views
0

我有一個在accdb文件中寫入的代碼,並且工作正常。我的經理要求我在字段DIAS(您會在代碼中找到下面的字段)允許多選,將所有選定的值插入數據庫中。現在它只插入第一個:在一個字段中插入多條記錄

Imports System.Data.OleDb 
Imports System.Data 
Imports System.Collections.Generic 
Imports System.Web.UI.WebControls.ListItem 

Partial Class _Default 
Inherits System.Web.UI.Page 



Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    Dim myConn As OleDbConnection 
    Dim cmd As OleDbCommand 
    Dim sqlString, FName, LName, Account, Supervisor, Type, Justification, Days, Clock, Emp, Mess As String 


    FName = Name.Text 
    LName = Last.Text 
    Account = DropDownList1.SelectedValue 
    Supervisor = DropDownList2.SelectedValue 
    Type = DropDownList4.SelectedValue 
    Justification = Jus.Text 
    Clock = DropDownList3.SelectedValue 
    Days = DropDownList6.SelectedValue 
    Emp = DropDownList5.SelectedValue 
    Mess = ListBox1.SelectedValue 


    Response.Write("<script language=""javascript"">alert('¡Gracias por la información! Saludos!!');</script>") 

    myConn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\WFM\Database4.accdb") 

    myConn.Open() 
    ' sqlString = "INSERT INTO Absence (FName, LName, Account, Supervisor, Tipo, Justification, Clock, Cuando) VALUES (" + FName + "," + LName + "," + Account + "," + Supervisor + "," + Type + "," + Justification + "," + Clock + "," + Days + ")" 

    sqlString = "INSERT INTO Absence (FName, LName, Account, Supervisor, Tipo, Justification, Clock, Diass, Mess, Emp) VALUES (@FName, @LName, @Account, @Supervisor, @Type, @Justification, @Clock, @Days, @Mess, @Emp)" 
    cmd = New OleDbCommand(sqlString, myConn) 
    cmd.Parameters.AddWithValue("@FName", FName) 
    cmd.Parameters.AddWithValue("@LName", LName) 
    cmd.Parameters.AddWithValue("@Account", Account) 
    cmd.Parameters.AddWithValue("@Supervisor", Supervisor) 
    cmd.Parameters.AddWithValue("@Tipo", Type) 
    cmd.Parameters.AddWithValue("@Justification", Justification) 
    cmd.Parameters.AddWithValue("@Clock", Clock) 
    cmd.Parameters.AddWithValue("@Days", Days) 
    cmd.Parameters.AddWithValue("@Mess", Mess) 
    cmd.Parameters.AddWithValue("@Emp", Emp) 

    cmd.ExecuteNonQuery() 
    myConn.Close() 


End Sub 

這可能嗎?

在此先感謝!

+0

因此,如果我理解正確,您希望在每個選定日期的數據庫中添加一個新行。在每一行中,除了日期值以外,所有字段值都保持不變?如果是這種情況,那麼有一個快速的代碼解決方案。 – ThatGuy

+0

嗨,下拉列表DAYS(天= DropDownList6.SelectedValue),允許多選。我需要將所有選定的值插入到數據庫的相同字段中。 IE如果用戶選擇,則1,2,3,4 ...當前僅添加第一個值(1)。 –

回答

0

這將爲列表框中的每個選定項目添加一行,同時保留其他框的值。 循環選定日期並執行每天的查詢。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
Dim myConn As OleDbConnection 
Dim cmd As OleDbCommand 
Dim sqlString, FName, LName, Account, Supervisor, Type, Justification, Days, Clock, Emp, Mess As String 


FName = Name.Text 
LName = Last.Text 
Account = DropDownList1.SelectedValue 
Supervisor = DropDownList2.SelectedValue 
Type = DropDownList4.SelectedValue 
Justification = Jus.Text 
Clock = DropDownList3.SelectedValue 
Emp = DropDownList5.SelectedValue 
Mess = ListBox1.SelectedValue 


Response.Write("<script language=""javascript"">alert('¡Gracias por la información! Saludos!!');</script>") 

myConn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\WFM\Database4.accdb") 

myConn.Open() 
' sqlString = "INSERT INTO Absence (FName, LName, Account, Supervisor, Tipo, Justification, Clock, Cuando) VALUES (" + FName + "," + LName + "," + Account + "," + Supervisor + "," + Type + "," + Justification + "," + Clock + "," + Days + ")" 

sqlString = "INSERT INTO Absence (FName, LName, Account, Supervisor, Tipo, Justification, Clock, Diass, Mess, Emp) VALUES (@FName, @LName, @Account, @Supervisor, @Type, @Justification, @Clock, @Days, @Mess, @Emp)" 
for each s as string in DropDownList6.selectedItems 
    Days = s 
    cmd = New OleDbCommand(sqlString, myConn) 
    cmd.Parameters.AddWithValue("@FName", FName) 
    cmd.Parameters.AddWithValue("@LName", LName) 
    cmd.Parameters.AddWithValue("@Account", Account) 
    cmd.Parameters.AddWithValue("@Supervisor", Supervisor) 
    cmd.Parameters.AddWithValue("@Tipo", Type) 
    cmd.Parameters.AddWithValue("@Justification", Justification) 
    cmd.Parameters.AddWithValue("@Clock", Clock) 
    cmd.Parameters.AddWithValue("@Days", S) 
    cmd.Parameters.AddWithValue("@Mess", Mess) 
    cmd.Parameters.AddWithValue("@Emp", Emp) 

    cmd.ExecuteNonQuery() 
Next 
myConn.Close() 
End Sub 

編輯:我忘了更改從Days到S的傳遞變量。然後代碼現在反映這些更改。 此外,請參閱此線程http://www.access-programmers.co.uk/forums/showthread.php?t=233106

+0

Dosen't工作。 '/'應用程序中的服務器錯誤。 INSERT INTO查詢不能包含多值字段。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。 異常詳細信息:System.Data.OleDb.OleDbException:INSERT INTO查詢不能包含多值字段。 源錯誤: 48號線:cmd.Parameters.AddWithValue( 「@的Emp」,EMP) 49號線:線路 50:cmd.ExecuteNonQuery() 51號線:接下來 –

+0

蹊蹺這個PARAM?第48行:cmd.Parameters.AddWithValue(「@ Emp」,Emp) 我不確定這個錯誤來自哪裏。有人在這裏可能會認識到它,並能夠更好地解決您的問題。 – ThatGuy

+0

不,錯誤是當我選擇多個記錄在accdb文件中寫入時 異常詳細信息:System.Data.OleDb.OleDbException:INSERT INTO查詢不能包含多值字段。 如果我選擇一個記錄,應用程序工作正常 –