2011-12-21 30 views
1

我試圖將數據從excel文件導入到我的數據庫。我有一個OleDBDataAdapter用於從Excel文件中讀取數據,另外兩個OleDBDataAdapter用於將數據插入到SQL Server 2008 Express數據庫的兩個表中。執行代碼後,SQL數據庫中的表格將填充正確數量的新行,但只包含空值。調試表明,數據是從excel文件中正確讀取的,並且值已正確插入到相應的DataTable對象中。也許我做了插入命令的參數錯誤?代碼如下:ASP.NET 4 OleDBDataAdapter插入命令插入空值到表中,而不是提供的值

Dim fajl As String 

    fajl = MapPath("fajlovi/" + Request.QueryString("ID")) 


    Dim sConnectionStringExcel As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & fajl & ";Extended Properties=Excel 8.0;" 
    Dim objConnExcel As New OleDbConnection(sConnectionStringExcel) 
    objConnExcel.Open() 
    Dim objCmdSelectExcel As New OleDbCommand("SELECT ZavedenKodPov, Ime, Mjesto, Adresa, JMBG, LicniBroj, ZaposlenKod, Nepoznat, Umro, Penzioner, Reon, VoziloProizvodjac, VoziloModel, VoziloRegistracija, Nekretnina, Datum, KontoBroj, NazivKonta, OpisPromjene, Dug, Pot FROM [Sheet1$]", objConnExcel) 
    Dim objAdapterExcel As New OleDbDataAdapter() 
    objAdapterExcel.SelectCommand = objCmdSelectExcel 
    Dim objDatasetExcel As New DataSet() 
    objAdapterExcel.Fill(objDatasetExcel, "XLData") 
    Dim tExcel As DataTable 
    tExcel = objDatasetExcel.Tables(0) 

    Dim sConnectionStringDB As String = "Provider=SQLOLEDB;Data Source=WORKHORSE\sqlexpress;Initial Catalog=prinudna_testdb;Persist Security Info=True;User ID=korisnik;Password=**********" 
    Dim objConnDB As New OleDbConnection(sConnectionStringDB) 
    objConnDB.Open() 

    Dim objCmdSelectDBDuznik As New OleDbCommand("SELECT ZavedenKodPov, Ime, Mjesto, Adresa, JMBG, LicniBroj, ZaposlenKod, Nepoznat, Umro, Penzioner, Reon, VoziloProizvodjac, VoziloModel, VoziloRegistracija, Nekretnina FROM tmpImportDuznik") 
    Dim objCmdInsertDBDuznik As New OleDbCommand("INSERT INTO tmpImportDuznik (ZavedenKodPov, Ime, Mjesto, Adresa, JMBG, LicniBroj, ZaposlenKod, Nepoznat, Umro, Penzioner, Reon, VoziloProizvodjac, VoziloModel, VoziloRegistracija, Nekretnina) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") 
    Dim objAdapterDBDuznik As New OleDbDataAdapter() 
    objAdapterDBDuznik.InsertCommand = objCmdInsertDBDuznik 
    objAdapterDBDuznik.SelectCommand = objCmdSelectDBDuznik 
    objAdapterDBDuznik.InsertCommand.Connection = objConnDB 
    objAdapterDBDuznik.SelectCommand.Connection = objConnDB 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("ZavedenKodPov", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Ime", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Mjesto", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Adresa", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("JMBG", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("LicniBroj", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("ZaposlenKod", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Nepoznat", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Umro", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Penzioner", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Reon", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("VoziloProizvodjac", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("VoziloModel", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("VoziloRegistracija", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBDuznik.InsertCommand.Parameters.Add("Nekretnina", Data.OleDb.OleDbType.VarWChar) 
    Dim objDatasetDBDuznik As New DataSet() 
    objAdapterDBDuznik.Fill(objDatasetDBDuznik, "tmpImportDuznik") 
    Dim tDBDuznik As DataTable 
    tDBDuznik = objDatasetDBDuznik.Tables(0) 
    Dim nRowDuznik As Data.DataRow 

    Dim objCmdSelectDBKartica As New OleDbCommand("select ZavedenKodPov, Datum, KontoBroj, NazivKonta, OpisPromjene, Dug, Pot FROM tmpImportKartica") 
    Dim objCmdInsertDBKartica As New OleDbCommand("INSERT INTO tmpImportKartica (ZavedenKodPov, Datum, KontoBroj, NazivKonta, OpisPromjene, Dug, Pot) VALUES (?, ?, ?, ?, ?, ?, ?)") 
    Dim objAdapterDBKartica As New OleDbDataAdapter() 
    objAdapterDBKartica.InsertCommand = objCmdInsertDBKartica 
    objAdapterDBKartica.SelectCommand = objCmdSelectDBKartica 
    objAdapterDBKartica.InsertCommand.Connection = objConnDB 
    objAdapterDBKartica.SelectCommand.Connection = objConnDB 
    objAdapterDBKartica.InsertCommand.Parameters.Add("ZavedenKodPov", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBKartica.InsertCommand.Parameters.Add("Datum", Data.OleDb.OleDbType.Date) 
    objAdapterDBKartica.InsertCommand.Parameters.Add("KontoBroj", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBKartica.InsertCommand.Parameters.Add("NazivKonta", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBKartica.InsertCommand.Parameters.Add("OpisPromjene", Data.OleDb.OleDbType.VarWChar) 
    objAdapterDBKartica.InsertCommand.Parameters.Add("Dug", Data.OleDb.OleDbType.Decimal) 
    objAdapterDBKartica.InsertCommand.Parameters.Add("Pot", Data.OleDb.OleDbType.Decimal) 
    Dim objDatasetDBKartica As New DataSet() 
    objAdapterDBKartica.Fill(objDatasetDBKartica, "tmpImportKartica") 
    Dim tDBKartica As DataTable 
    tDBKartica = objDatasetDBKartica.Tables(0) 
    Dim nRowKartica As Data.DataRow 

    Dim i As Integer 

    For i = 0 To tExcel.Rows.Count - 1 
     nRowDuznik = tDBDuznik.NewRow() 
     nRowDuznik.Item("ZavedenKodPov") = tExcel.Rows(i).Item("ZavedenKodPov") 
     nRowDuznik.Item("Ime") = tExcel.Rows(i).Item("Ime") 
     nRowDuznik.Item("Mjesto") = tExcel.Rows(i).Item("Mjesto") 
     nRowDuznik.Item("Adresa") = tExcel.Rows(i).Item("Adresa") 
     nRowDuznik.Item("JMBG") = tExcel.Rows(i).Item("JMBG") 
     nRowDuznik.Item("LicniBroj") = tExcel.Rows(i).Item("LicniBroj") 
     nRowDuznik.Item("ZaposlenKod") = tExcel.Rows(i).Item("ZaposlenKod") 
     nRowDuznik.Item("Nepoznat") = tExcel.Rows(i).Item("Nepoznat") 
     nRowDuznik.Item("Umro") = tExcel.Rows(i).Item("Umro") 
     nRowDuznik.Item("Penzioner") = tExcel.Rows(i).Item("Penzioner") 
     nRowDuznik.Item("Reon") = tExcel.Rows(i).Item("Reon") 
     nRowDuznik.Item("VoziloProizvodjac") = tExcel.Rows(i).Item("VoziloProizvodjac") 
     nRowDuznik.Item("VoziloModel") = tExcel.Rows(i).Item("VoziloModel") 
     nRowDuznik.Item("VoziloRegistracija") = tExcel.Rows(i).Item("VoziloRegistracija") 
     nRowDuznik.Item("Nekretnina") = tExcel.Rows(i).Item("Nekretnina") 
     tDBDuznik.Rows.Add(nRowDuznik) 

     If Not (IsDBNull(tExcel.Rows(i).Item("ZavedenKodPov"))) Then 
      nRowKartica = tDBKartica.NewRow() 
      nRowKartica.Item("ZavedenKodPov") = tExcel.Rows(i).Item("ZavedenKodPov") 
      nRowKartica.Item("Datum") = tExcel.Rows(i).Item("Datum") 
      nRowKartica.Item("KontoBroj") = tExcel.Rows(i).Item("KontoBroj") 
      nRowKartica.Item("NazivKonta") = tExcel.Rows(i).Item("NazivKonta") 
      nRowKartica.Item("OpisPromjene") = tExcel.Rows(i).Item("OpisPromjene") 
      nRowKartica.Item("Dug") = tExcel.Rows(i).Item("Dug") 
      nRowKartica.Item("Pot") = tExcel.Rows(i).Item("Pot") 
      tDBKartica.Rows.Add(nRowKartica) 
     End If 

    Next 
    objAdapterDBDuznik.Update(objDatasetDBDuznik.Tables(0)) 
    objAdapterDBKartica.Update(objDatasetDBKartica.Tables(0)) 

回答

0

我不會去通過所有的人,但是當你這樣做:

objAdapterDBDuznik.InsertCommand.Parameters.Add("ZavedenKodPov", Data.OleDb.OleDbType.VarWChar) 

你也需要這樣做:

objAdapterDBDuznik.InsertCommand.Parameters["ZavedenKodPov"].Value = yourValue 

您正在添加參數,但不會在其中添加值。無論如何,這就是我看起來的樣子。讓我知道如果這沒有幫助,或者我在這裏錯過了什麼。

+1

事實上,問題並沒有給參數提供值,但不是像你建議直接提供他們,我已經設置各項參數的SourceColumn屬性,即這樣做後: 'objAdapterDBDuznik.InsertCommand.Parameters.Add ( 「輸入法」,Data.OleDb.OleDbType.VarWChar)' 我也必須這樣做。 'objAdapterDBDuznik.InsertCommand.Parameters( 「輸入法」)SourceColumn = 「輸入法」' – rnkjnk 2011-12-21 17:02:51

+0

@rnkjnk無論哪種方式。很高興你解決了問題,我希望我的答案以某種方式幫助=)您可以使用此答案旁邊的向上箭頭或複選標記來表明您是否願意。 – jadarnel27 2011-12-21 17:10:02

+0

是的,謝謝你,你的回答引導我正確的方式!它看起來像我不能upvote你的答案,因爲我是新來的,它說我需要15聲望做它。反正非常感謝! – rnkjnk 2011-12-21 17:14:25