0

以前に同様の質問をしたことがありますが、それでもこれを機能させることはできません。

VS2010でC#を使用しています

私がやっていることは、ユーザーが入力した単語をtextbox1ボタンをクリックして"*"、その前にあるすべての単語を印刷するアプリケーションを作成することです。textbox2

SQL Serverデータベースを使用してこれを行っています。これは、"*"単語をデータベースに保存して、後でその単語が入力された回数を示すカウンターを追加できるようにするためです。

例えば:

  • ユーザーが入力the cat is *browntextbox1、ボタンを押すと、に*brown表示されますtextbox2

SQLServerの私のコードは次のとおりです。

SqlConnection con = new SqlConnection(@"Server=.\SQLEXPRESS;Database=StoreList;Integrated Security=sspi");

con.Open();
String queryStr = "SELECT item FROM StoreList WHERE item LIKE '*%'";
SqlCommand com = new SqlCommand(queryStr, con);
SqlDataReader sdr = com.ExecuteReader();

while (sdr.Read())
{
   this.textbox2.Text = sdr.GetValue(0).ToString();
}

sdr.Close();

私が助けを必要としているのは、アプリを機能させるためにそのコードをさらに進める方法です。そのため、textbox1から単語を取得する方法がわかりません。

助けてくれる人はいますか?

4

2 に答える 2

2

あなたのコード例を無視すると、ここで起こっていることがいくつかあるように私には思えます。

  1. textbox1に入力されたスター付きの単語のリストを作成したい
  2. スター付きの単語リストをtextbox2に出力したい
  3. 見つめられた単語の頻度リストを保存する

ポイント1と2は、データベースとの対話なしで実行できます。おそらく、正規表現を使用して、*を含む単語をパターンマッチングします。

ポイント3は、カウントが1の新しい単語を挿入するか、既知の単語のカウントを1だけ更新するSQLステートメントを実行する場合です。

次のコメントを編集する

ポイント1-単語のリストを作成する

var matches = new System.Text.RegularExpressions.Regex("\\*[^ \t]+").Matches(textbox1);

foreach (Match match in matches)
    Console.WriteLine(match.Value);

ポイント3-頻度リストの単語を保存する

//using statement to ensure connection is cleaned up correctly
using (SqlConnection connection = new SqlConnection(@"Server=.\SQLEXPRESS;Database=StoreList;Integrated Security=sspi"))
{
    connection.Open();

    foreach (Match match in matches)
    {
        var command = new SqlCommand("UpdateWordFrequency", connection);

        command.CommandType = System.Data.CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@word", match.Value));

        command.ExecuteNonQuery();
    }
}

手順は次のようになります

create procedure UpdateWordFrequency
    @word varchar(50)
as
if not exists (select 1 from WordList where word = @word)
    insert into WordList (word, frequency) values (@word, 0)

update WordList set frequency = frequency + 1 where word = @word

また、WordListテーブルには、word(varchar)とfrequency(int)の2つのフィールドがあります。

ポイント2-スター付きの単語を出力する

さて、これはWordListテーブルから選択する場合になります。

于 2012-04-20T10:21:24.027 に答える
1

これにはストアド プロシージャを使用する方がよい場合があります。

ストアド プロシージャを使用すると、次のようなことができます。

create procedure Insert_StoreList
@Word nvarchar(50)
AS

insert StoreList (
item )
values (
@Word )

SELECT item FROM StoreList WHERE item LIKE '*%'

次に、C#で次を使用できます

SqlCommand com = new SqlCommand("Insert_StoreList", con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.Add(new SqlParameter("@Word", Textbox1.Text));
SqlDataReader sdr = com.ExecuteReader();

編集 - ストアド プロシージャを使用したくない場合は、2 行の SQL でこれを行うこともできます。テーブル。

最初の sql は次のようになります。

String queryStr = "insert StoreList (item) values (" + Textbox1.Text + ")"; 

2 番目の SQL は次のようになります。

String queryStr = "SELECT item FROM StoreList WHERE item LIKE '*%'";
于 2012-04-20T10:14:56.280 に答える