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))
事实上,问题并没有给参数提供值,但不是像你建议直接提供他们,我已经设置各项参数的SourceColumn属性,即这样做后: 'objAdapterDBDuznik.InsertCommand.Parameters.Add ( “输入法”,Data.OleDb.OleDbType.VarWChar)' 我也必须这样做。 'objAdapterDBDuznik.InsertCommand.Parameters( “输入法”)SourceColumn = “输入法”' – rnkjnk 2011-12-21 17:02:51
@rnkjnk无论哪种方式。很高兴你解决了问题,我希望我的答案以某种方式帮助=)您可以使用此答案旁边的向上箭头或复选标记来表明您是否愿意。 – jadarnel27 2011-12-21 17:10:02
是的,谢谢你,你的回答引导我正确的方式!它看起来像我不能upvote你的答案,因为我是新来的,它说我需要15声望做它。反正非常感谢! – rnkjnk 2011-12-21 17:14:25