2011-12-21 27 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