-4

これは私のファイルの内容です:


atul,salunke
amol,salunke
anil,salunke
;dandegaon
amar,salunke
;bhoom
akash,salunke
;chennai
pappu,salunke

これは私のコードです。カウント 5 の後にバルクをフラッシュしているときにコメントがありません;chennai。そのため、現在の行を読みながら次の行の内容を確認する必要があります。

これは私のコードです:

int counter = 0;
int cnt = 0;
string line = "";
SqlConnection con = new SqlConnection("Data Source=atul-pc;Initial Catalog=TestDB;Integrated Security=True");
SqlBulkCopy bulkCopy = new SqlBulkCopy(con, SqlBulkCopyOptions.TableLock
                                       | SqlBulkCopyOptions.FireTriggers
                                       | SqlBulkCopyOptions.UseInternalTransaction, null);
con.Open();
bulkCopy.BatchSize = 5;
bulkCopy.BulkCopyTimeout = 3000;

string[] sField = null;
DataRow row;
System.IO.StreamReader file = new System.IO.StreamReader("H:\\sample file.txt");

DataTable table = new DataTable();
DataColumn col1 = new DataColumn("iID"); table.Columns.Add("iID", System.Type.GetType("System.Int32"));
DataColumn col2 = new DataColumn("vchFirstName"); table.Columns.Add("vchFirstName", System.Type.GetType("System.String"));
DataColumn col3 = new DataColumn("vchLastName"); table.Columns.Add("vchLastName", System.Type.GetType("System.String"));
DataColumn col4 = new DataColumn("Comment"); table.Columns.Add("Comment", System.Type.GetType("System.String"));
bulkCopy.DestinationTableName = "userDetails";
bulkCopy.ColumnMappings.Add("iID", "iID");
bulkCopy.ColumnMappings.Add("vchFirstName", "vchFirstName");
bulkCopy.ColumnMappings.Add("vchLastName", "vchLastName");
bulkCopy.ColumnMappings.Add("Comment", "Comment");
int priv = 0;
 while ((line = file.ReadLine()) != null)
{
     int columnCount =0 ;
    char[] cDelim = new char[] { ',' };
    sField = line.Split(cDelim);
    if (line.Contains(","))
    {
        counter++;
        priv = counter;
        row = table.NewRow();
        row["iID"] = counter;
        foreach (string s in sField)
        {
            columnCount++;
            row[columnCount] = s.Trim();
        }
        table.Rows.Add(row);

    }
    if (line.Contains(";"))
    {

        DataRow[] result = table.Select("iID="+priv+"");
        result[0]["Comment"] = line.Trim();

    }

    if (Math.Floor((double)counter / 5) != Math.Floor((double)(counter - 1) / 5))
    {
        bulkCopy.WriteToServer(table);// here i missing coment  ;chennai
        table.Clear();
    }
    cnt++;
}
4

1 に答える 1

1

ついていけなくて困っていますが、あなたがtable.Clear()の後に電話をかけていることが問題だと思いますbulkCopy.WriteToServer(table)。に電話する必要がありますtable.Rows.Clear()。を呼び出すTable.Clear()と、列を含むテーブルからすべてがダンプされます。行だけをダンプするつもりのようです。

あなたがそれに取り組んでいる間、あなたを助けるいくつかの変更を加えることもできます...

  • 使用するFile.ReadAllLines()
  • a を使用しForEachてループします。
  • 弦を選択しながらトリムします。
  • 使用するstring.Format()

このようなもの:

int priv = 0;
var lines = File.ReadAllLines("H:\\sample file.txt").Select(s=>s.Trim());
foreach (var line in lines)
{
    if (line.Contains(";"))
    {
        DataRow[] result = table.Select(string.Format("iID={0}", priv));
        result[0]["Comment"] = line;
    }
    else
    {
        row = table.NewRow();
        row["iID"] = counter;
        counter++;
        priv = counter;
        var words = line
            .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(it => it.Trim());
        int columnCount = 0;
        foreach (var word in words)
        {
            columnCount++;
            row[columnCount] = word;
        }
        table.Rows.Add(row);
    }

    if (Math.Floor((double)counter / 5) != Math.Floor((double)(counter - 1) / 5))
    {
        bulkCopy.WriteToServer(table);// here i missing coment  ;chennai
        table.Clear();
    }

    cnt++;
}
于 2013-07-09T21:29:44.890 に答える