2011-08-11 24 views
0

これは私のコードのサンプルです。 Microsoft Visual Studio 2010をasp.netバージョン2.0で使用しています。ユーザーがインポートボタンをクリックすると、csvファイルがデータベースに保存されます。私のコードにはエラーがあります。私はそれらの問題を解決する方法を知らないので、助けてください!アップロードされた.csvファイルをasp.netを使用してSQL Server Managementデータベースに保存する方法

protected void btnImport_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection (@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true"); 
    StreamReader Sr = new StreamReader("filepath"); 

    string line; 
    while ((line = Sr.ReadLine()) != null) 
    { 
     line = Sr.ReadLine(); 
    } 

    const string SQL = "INSERT INTO [Guest] ([GuestName], [IC_Number], [EventName], [GuestID]) VALUES (@GuestName, @IC_Number, @EventName, @GuestID)"; 
    SqlCommand cmd = new SqlCommand(SQL, con); 
    cmd.Parameters.AddWithValue("@GuestName", Sr); 
    cmd.Parameters.AddWithValue("@IC_Number", Sr); 
    cmd.Parameters.AddWithValue("@EventName", Sr); 
    cmd.Parameters.AddWithValue("@GuestID", Sr); 

    con.Open(); 
    cmd.ExecuteNonQuery();// 1,0 will determine whether line is inserted, upload has error... 
    con.Close(); 
} 
+0

このタイプのコーディングでは非常に新しいので、できるだけ早く実装する必要があります。( – Rust20

+0

エラーは何ですか? –

答えて

0
  1. Srがあなたのパラメータではありませんが、lineあなたのデータの配列を含んでいる間、あなたのINSERTクエリは、あなたでなければなりません。

    :だから、それはおそらく、あなたのコード内で二回AddWithValue
  2. あなたがライン= Sr.ReadLineを(割り当てる)に与えなければならないline[i]で、ちょうどので、このような何かをしようとwhile

でそれを行います私はこのような何かを行っている

protected void btnImport_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection (@"Data Source=localhost\SQLEXPRESS;Initial Catalog=PSeminar;Integrated Security=true;Trusted_Connection=Yes;MultipleActiveResultSets=true"); 
    con.Open(); 

    StreamReader Sr = new StreamReader("filepath"); 
    string line; 
    string SQL = "INSERT INTO [Guest] ([GuestName], [IC_Number], [EventName], [GuestID]) VALUES (@GuestName, @IC_Number, @EventName, @GuestID)"; 
    while ((line = Sr.ReadLine()) != null) 
    { 
     SqlCommand cmd = new SqlCommand(SQL, con); 

     cmd.Parameters.AddWithValue("@GuestName", line[0]); 
     cmd.Parameters.AddWithValue("@IC_Number", line[1]); 
     cmd.Parameters.AddWithValue("@EventName", line[2]); 
     cmd.Parameters.AddWithValue("@GuestID", line[3]); 

     cmd.ExecuteNonQuery();// 1,0 will determine whether line is inserted, upload has error... 
    } 

    con.Close(); 
} 
+0

毎回「SqlCommand」を作成するのはなぜですか? –

+0

ねえ、ありがとう私のプロジェクトで実装したときに、このエラーが発生しました "オブジェクト参照がオブジェクトのインスタンスに設定されていません。NullReferenceExceptionはユーザーコードによって処理されませんでした"これはどういう意味ですか?私の無知についてはごめんなさい/ – Rust20

0

は、しかし、それはXLSファイルiは、インポートするために必要でしたが、あまりdifferentceは本当に、ここで私は

のObjとして保護サブButtonImport_Click(ByValの送信者

を使用するコードです電気ショック療法、System.EventArgsとしてByVal e)のButtonImport.Click PanelView.Visible = Falseの PanelUpload.Visible = Falseの PanelImport.Visible = Trueの LabelImport.Text = ""「
Dim xConnstr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
         "Data Source=" & (Server.MapPath("SiteTemplate.xls")) & ";" & _ 
         "Extended Properties=Excel 8.0" 

    ' create your excel connection object using the connection string 
    Dim objXConn As New System.Data.OleDb.OleDbConnection(xConnstr) 
    objXConn.Open() 
    Dim objCommand As New OleDbCommand("SELECT * FROM [importsites$]", objXConn) 




    'Creating the data reader 
    Dim reader As OleDbDataReader 
    reader = objCommand.ExecuteReader() 

    Dim counter As Integer = 0 
    While reader.Read() 

     counter = counter + 1 

     Dim siteID As Integer = 0 
     Dim siteIWSref As String = Convert.ToString(reader("siteIWSref")) 
     If siteIWSref = "" Then 
      siteIWSref = "." 
     End If 
     Dim siteUPRN As String = Convert.ToString(reader("siteUPRN")) 
     If siteUPRN = "" Then 
      siteUPRN = "." 
     End If 
     Dim siteName As String = Convert.ToString(reader("siteName")) 
     Dim siteAdd1 As String = Convert.ToString(reader("siteAdd1")) 
     Dim siteAdd2 As String = Convert.ToString(reader("siteAdd2")) 
     Dim siteAdd3 As String = Convert.ToString(reader("siteAdd3")) 
     Dim sitePcode As String = Convert.ToString(reader("sitePcode")) 
     Dim siteContact As String = Convert.ToString(reader("siteContact")) 
     Dim siteContactPos As String = Convert.ToString(reader("siteContactPos")) 
     Dim siteContactTel As String = Convert.ToString(reader("siteContactTel")) 
     Dim siteDesc As String = Convert.ToString(reader("siteDesc")) 
     Dim siteCompany As Integer = CInt(CompanyDD.SelectedValue) 

     Dim siteOccupants As String = Convert.ToString(reader("siteOccupants")) 

     Dim siteType As String = Convert.ToString(reader("siteType")) 



     siteID = ImportIntotblSite(siteIWSref, siteUPRN, siteName, siteAdd1, siteAdd2, siteAdd3, sitePcode, siteContact, siteContactPos, siteContactTel, siteDesc, siteCompany, siteOccupants, siteType) 

     LabelImport.Text &= siteID & siteIWSref & " " & siteUPRN & " " & siteName & " " & siteAdd1 & " " & siteAdd2 & " " & siteAdd3 & " " & " " & sitePcode & " " & siteContact & " " & siteContactPos & " " & siteContactTel & " " & siteDesc & " " & siteCompany & " " & siteOccupants & " " & " " & siteType & "<br>" 


    End While 
    reader.Close() 
    objCommand.Dispose() 
    objXConn.Close() 

    btnBack.Enabled = True 

    btnBack.Visible = True 

    btnSave.Visible = True 
    btnSave.Enabled = True 

End Sub 
Protected Function ImportIntotblSite(ByVal siteIWSref As String, ByVal siteUPRN As String, ByVal siteName As String, ByVal siteAdd1 As String, ByVal siteAdd2 As String, ByVal siteAdd3 As String, ByVal sitePcode As String, ByVal siteContact As String, ByVal siteContactPos As String, ByVal siteContactTel As String, ByVal siteDesc As String, ByVal siteCompany As Integer, ByVal siteOccupants As String, ByVal siteType As String) As Integer 


    siteIWSref = Left(siteIWSref, 20) 
    siteUPRN = Left(siteUPRN, 20) 
    siteName = Left(siteName, 60) 
    siteAdd1 = Left(siteAdd1, 50) 
    siteAdd2 = Left(siteAdd2, 50) 
    siteAdd3 = Left(siteAdd3, 50) 
    sitePcode = Left(sitePcode, 10) 
    siteContact = Left(siteContact, 35) 
    siteContactPos = Left(siteContactPos, 35) 
    siteContactTel = Left(siteContactTel, 20) 
    siteDesc = Left(siteDesc, 220) 
    siteOccupants = Left(siteOccupants, 120) 
    siteType = Left(siteType, 35) 


    Dim siteID As Integer = 0 
    Try 
     Dim SSAdapter As New importSitesDataSetTableAdapters.tblSiteTableAdapter 
     Dim SSDataTable As importSitesDataSet.tblSiteDataTable = Nothing 
     SSDataTable = SSAdapter.GetDataByNumbers(siteIWSref, siteName, siteCompany) 
     If siteName = "" Then 
      siteName = "" 
     End If 
     'see if the category already exists in the table, if not insert it 
     If Not SSDataTable Is Nothing Then 
      If siteName = "" Then 
       LabelImport.Text = LabelImport.Text & _ 
            "<font color=red>ERROR: BLANK SITE NAME: ROW NOT IMPORTED : " & _ 
            "ID: " & siteID & _ 
            " Name: " & siteName & " " & siteCompany & ".</font><br>" 

      ElseIf SSDataTable.Rows.Count > 0 Then 
       If Not SSDataTable(0).siteID = Nothing Then 
        siteID = SSDataTable(0).siteID 

        LabelImport.Text = LabelImport.Text & _ 
               "<font color=blue> Recorded already exists : " & _ 
              "ID: " & siteID & _ 
              "Name: " & siteName & " " & siteCompany & ".</font><br>" 
       End If 
      End If 
     End If 


     If siteID = 0 And siteName <> "" Then 
      siteID = Convert.ToInt32(SSAdapter.InsertQuery(siteIWSref, siteUPRN, siteName, siteAdd1, siteAdd2, siteAdd3, sitePcode, siteContact, siteContactPos, siteContactTel, siteDesc, siteCompany, siteOccupants, siteType)) 
      LabelImport.Text = LabelImport.Text & _ 
      "<font color=green> ROW SUCCESSFULLY IMPORTED: " & _ 
       " ID: " & siteID & _ 
       " Name: " & siteName & " " & siteCompany & ".</font><br>" 
     End If 


     Return siteID 
     'SSAdapter.Dispose() 

    Catch ex As Exception 
     LabelImport.Text = LabelImport.Text & "<font color=red>" & ex.ToString & ".</font><br>" 
     Return 0 
    End Try 

End Function 


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    'TableButtons.Visible = False 
    'FileUploadExcel.Visible = False 
    'PanelUpload.Visible = False 
    btnYes.Visible = False 
    btnNo.Visible = False 
    btnBack.Enabled = False 
    btnBack.Visible = False 
    ButtonView.Enabled = False 
    ButtonImport.Enabled = False 
    btnSave.Visible = False 
    btnSave.Enabled = False 
End Sub 

空白試しにリセットを処理しますこれは私がどのように乗っているか教えてください。

でのSQL Serverに情報をアップロードする方法の華麗な例があります: http://www.shiningstar.net/aspnet_articles/DataSet/DataSetProject.aspx

は私がそのExcelのが、しかし確かにそれくらいの差が出ることがカント認識しています。

+0

ありがとう私は言ったように、私はこれに新しいので、私はそれをC#に変換する方法を知らない/ – Rust20

+0

VBでC#コンバータをグーグルで試してみて、その方法でコードをテストしてください – Reidy0588

+0

または私はあなたがCでテストコードを持っていると思います#あなたはそれを使用して、必要に応じて変更することができます:-) – Reidy0588

関連する問題