1

C# プログラミングを使用しています。csv ファイルを選択して、アクセス データベースに挿入しています。ID、FName、LName、Address、Zipcode、cell number のような csv ファイルの 6 つの列が同じ順序であるとします。アクセスでは、私の列は FirstName、LastName、S_NO、zip_code (同じ順序) です。列名が異なり、順序も異なる場合、この csv ファイルをインポートして db にアクセスする方法を教えてください。どうすればこれを実装できますか?? Plsは提案します。次のコードを試しました:

enter code here

DataSet da = 新しい DataSet(); 試す {

            da = this.ConnectCSV(strCSVFile);
            string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\EmpApp\\EmpData.accdb;";
            OleDbConnection conn = new OleDbConnection(connstring);
            OleDbCommand cmd = new OleDbCommand();
            cmd.CommandType = CommandType.Text;
            conn.Open();
            for (int i = 0; i <= da.Tables["Ss"].Rows.Count - 1; i++)
            {

                for (int j = 1; j <= da.Tables["Ss"].Columns.Count - 1; j++)
                {
                    cmd.CommandText = "Insert  into EMP_DOWNLOAD ( ID,Company_name,month_billed,year,start_date,end_date,Designation"
                      + ")  values(" + (i + 1) + ",'" 
                      + da.Tables["Ss"].Rows[i].ItemArray.GetValue(0) + "',"
                      + da.Tables["Ss"].Rows[i].ItemArray.GetValue(8) + 
                      da.Tables["Ss"].Rows[i].ItemArray.GetValue(9) + ")";                        
                    cmd.Connection = conn;
                    cmd.ExecuteNonQuery();
                 }
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            btnUpload.Enabled = false;
        }
enter code here
4

3 に答える 3

1

Linqステートメントを使用してテキストを分割し、パラメーターオブジェクトの配列を作成してから、配列をループして、データベースに送信される各挿入ステートメントにパラメーターを追加します。

このような

var csvParams = (from line in System.IO.File.ReadLines("fileName.csv")
            from cell in line.Split(',').AsEnumerable()
            select new[]
            {
                new OleDbParameter("@fn", cell[1]),
                new OleDbParameter("@ln", cell[2]),
                new OleDbParameter("@sn", cell[3]),
                new OleDbParameter("@zc", cell[4])
            });

using( OleDbConnection conn = new OleDbConnection("CONNECTION STRING GOES HERE"))
{
    foreach (var person in csvParams)
    {
        using (OleDbCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = "INSERT INTO People(FirstName, LastName, S_NO, zip_code) VALUES (@fn, @ln, @sn, @zc)";
            cmd.Parameters.AddRange( (OleDbParameter[]) person);
            cmd.ExecuteNonQuery();
        }

    }
}
于 2013-01-08T16:51:18.140 に答える
1

MS Access を使用すると、CSV からテーブルに直接実行できます。

INSERT INTO EMP_DOWNLOAD (ID, Forename, LastName, Address, Zip_Code ) 
SELECT  ID, FName, LName, Address, Zipcode
FROM [Text;Database=z:\docs\;HDR=yes].[importfilename.csv]
于 2013-01-08T16:09:41.390 に答える
0

必須ではないフィールドに null を渡すことができます。

于 2013-01-08T16:09:20.847 に答える