1

まず、これが例というよりも質問である場合はお詫び申し上げますが、ここでは本当に迷っています。テキストファイルから情報をロードするWindowsフォームがあります。各テキストファイルには、特定の州のすべての市と郡があり、各セクションは。で区切られてい.Splitます。私はSQL Server 2008データベース、2つの列、名前とタイプを持っています。私がやりたいのは、すべての情報を取得し、名前の列が名前で、タイプの列が州または郡である個々の行を追加することです。これが私が情報を分割する方法です。テキストのエントリごとに新しい行を追加するにはどうすればよいですか?

void PopulateZones()
{
    ofdFile.Filter = "Text File (.txt)|*.txt|All Files (*.*|*.*";
    ofdFile.FilterIndex = 1;
    ofdFile.Multiselect = true;

    ofdFile.FileName = String.Empty;
    if (ofdFile.ShowDialog() == DialogResult.OK)
    {
        ofdFileLocTextBox.Text = ofdFile.FileName.ToString();
        string groups = File.ReadAllText(ofdFile.FileName);
        string[] parts = groups.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
        stateTextBox.Text = parts[0];
        citiesTextBox.Text = parts[1];
        countiesTextBox.Text = parts[2];
        AddtoSQL(parts[0], parts[1]);
    }
}

void AddtoSQL(string cities, string counties)
{
    Sqlconnection conn = new SqlConnection(connString)
    Sqlcommand comm = new Sqlcommand("INSERT into [Table] (Name, Type) Values (@Name, @Type))";
    comm.Parameters.Add(@Name, each line of textbox);
    comm.Parameters.Add(@Type, City or County);
    comm.ExecuteNonQuery();
}
4

3 に答える 3

1

したがって、最初の問題は、コードが思ったとおりに動作していないことです。大きな問題は、すべてのテキストを読み込んでから、最初の 3 つの値のみを選択していることです。データの形式ですが、次のようになっているとします。

Scotland*Edinburgh*Midlothian*
Scotland*Perth*Perthshire*

あなたのコード

string groups = File.ReadAllText(ofdFile.FileName);

次のように、ファイル全体を 1 つの文字列に読み取ります。

Scotland*Edinburgh*Midlothian*\r\nScotland*Perth*Perthshire*

したがって、次を使用して分割します

string[] parts = groups.Split(new char[] { '*' }, 
         StringSplitOptions.RemoveEmptyEntries);

6 つの部分からなる文字列配列が得られます。これから複数の行を挿入することは可能ですが、あまりきれいではありません。テキスト ファイルを行ごとに読み取り、行の配列を反復処理して、行ごとに分割し、関連する部分を SQL に追加する方がはるかに優れています。何かのようなもの

string[] lines = System.IO.File.ReadAllLines(ofdFile.FileName);
foreach (var line in lines)
{
    string[] parts = line.Split('*');
    AddtoSQL(parts[0], parts[1]);
}

これですべてのデータが挿入されるはずですが、余談ですが、一度に多数の挿入を実行する場合は、これらの挿入を SQL トランザクション内に格納することをお勧めします。

SqlTransaction クラスに関するこの MSDN の記事をご覧ください

その要点は、最初にトランザクションを宣言してから、トランザクションに対してそれらを実行する挿入をループすることです。最後に、トランザクションをコミットすると、すべてのクエリがまとめてデータベースに書き込まれます。私がこれを行う理由は、その方がはるかに迅速かつ安全だからです。

于 2013-02-07T09:46:27.080 に答える
0

SQL Server 2008 では、1 つのクエリで複数の行 (レコード) を挿入できます。必要なのは、行の値を抽出してクエリ文字列を作成するためのループです。したがって、AddToSQLメソッドでクエリを次のようにします。

INSERT INTO [Table](Name, Type)
VALUES ('First',State1),
('Second',State2),
('Third',State3),
('Fourth',State4),

1 つの Insert ステートメントを使用して複数のレコードを挿入する

于 2013-02-06T00:32:24.900 に答える
0

SQLステートメントを「[テーブル](名前、タイプ)値(@名前、@タイプ)に挿入」に変更すると機能しますか?ブラケット付き。

于 2013-02-05T23:40:24.117 に答える