2011-12-21 11 views
1

データをExcelデータベースからデータベースにインポートしようとしています。 Excelファイルからデータを読み取るための1つのOleDBDataAdapterと、SQL Server 2008 Expressデータベースの2つのテーブルにデータを挿入する2つのOleDBDataAdapterがあります。コードを実行した後、SQLデータベース内のテーブルには正しい数の新しい行が格納されますが、NULL値のみが格納されます。デバッグでは、データがExcelファイルから正しく読み取られ、値が対応するDataTableオブジェクトに正しく挿入されていることがわかりました。たぶんinsertコマンドのパラメータに何か問題がありましたか?次のようにコードは次のとおりです。ASP.NET 4 OleDBDataAdapter Insertコマンドは、指定された値ではなく、テーブルにNULL値を挿入します。

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["ZavedenKodPov"].Value = yourValue 

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

をあなたもこれを実行する必要があります

パラメータを追加していますが、パラメータを追加していません。とにかくそれは私のように見えます。それが助けにならないか、私がここで何かを逃してしまったかどうかを教えてください。

+1

実際の問題は、パラメータに値を供給されなかったが、代わりにあなたが示唆したように、それらを直接供給すること、私はつまり、これを実行した後、すべてのパラメータのSourceColumnプロパティを設定しました: 'objAdapterDBDuznik.InsertCommand.Parameters.Addを。 'objAdapterDBDuznik.InsertCommand.Parameters( "IME")と、SourceColumn = "IME"' – rnkjnk

+0

@rnkjnkいずれかの方法:( "IME"、Data.OleDb.OleDbType.VarWCharは) ' は私もこれをしなければなりません。あなたがうまくいけばうれしいです、私は答えが何らかの形で助けてくれることを願っています。)あなたは望むならば、この答えの横にある上向き矢印またはチェックマークを使うことができます。 – jadarnel27

+0

はい、ありがとう、あなたの答えは私に正しい方法を導いた!私はここで新しいので、私はあなたの答えをupvoteすることができないように見える、それは私がそれを行うために15の評判が必要と言う。とにかくありがとう! – rnkjnk

関連する問題