ASP.NET 4 OleDBDataAdapter Insert命令将空值插入表中,而不是提供值

时间:2011-12-21 16:41:56

标签: asp.net sql

我正在尝试将excel文件中的数据导入我的数据库。我有一个OleDBDataAdapter用于从excel文件中读取数据,还有两个OleDBDataAdapter用于将数据插入到SQL Server 2008 Express数据库的两个表中。执行代码后,SQL数据库中的表将填充正确数量的新行,但仅包含空值。调试向我显示正确地从excel文件中读取数据,并且值正确地插入到相应的DataTable对象中。也许我对insert命令的参数做错了?代码如下:

    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))

1 个答案:

答案 0 :(得分:0)

我不打算通过所有这些,但是当你这样做时:

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

您还需要这样做:

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

您正在添加参数,但不会在其中添加值。无论如何,这就是我的样子。如果这没有用,或者我在这里错过了什么,请告诉我。