2012-04-20 11 views
0

私はこれまで同様の質問をしてきましたが、私はまだこの問題を解決できません。データベースとSQL C#

私がボタンをクリックし、それらの前に"*"を持つすべての単語がtextbox2

で印刷textbox1にユーザが入力した単語を要するアプリケーションを作成している私は何をやっているVS2010

にC#を使用しています私は"*"ワードをデータベースに保存しておきたいので、後でそのワードが何回入力されたかを示すカウンタを追加できるので、これを行うにはSQL Serverデータベースを使用しています。例えば

  • ユーザーがtextbox1the cat is *brownに入り、ボタンを押し、その後、SQL Serverのtextbox2
*brown表示され

私のコードはこれです:

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(); 

何私は、アプリケーションを動作させるためにそのコードをさらに進める方法について助けが必要です。だから私はそれがテキストボックス1から単語を得る方法を知らない。

ヘルプはありますか?

+0

私が何も試したことがない限り、他の回答は大いにありがとうございます – user1300788

+0

* sadface * ...... – user1300788

+0

私の回答を見てください私はそれを編集しているので、 2つの別々のSQL文を使用するストアドプロシージャ – Lex

答えて

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でもこれを行うことができます。最初はExecuteNonQueryでテーブルに値を取得し、2つ目はテーブルからすべてのワードを選択することです。

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

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

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

String queryStr = "SELECT item FROM StoreList WHERE item LIKE '*%'"; 
+0

ストアドプロシージャを使用する場合、作成したデータベースを使用するのか、それとも作成するのですか? – user1300788

+0

まあ、私のコードは正しいと思っていましたが、ちょっと修正してテキストボックスからの単語を取るようにしています – user1300788

+0

私はストアドプロシージャについては同意していません。 。 – Lex

2

あなたのコードの例を無視することは、ここで起こって物事のカップルがある私には思えます。あなたがstar'd単語のリストを建てたい

  1. がTextBox1を
  2. に入ったあなたは出力に
  3. ストアに見つめていた言葉
の周波数リストをTextBox2をするstar'd単語リストが欲しいです

ポイント1とポイント2は、データベースとのやりとりなしに実行できます。多分正規表現を使って*と一致する単語をパターン化する。

ポイント3は、カウントが1の新しい単語を挿入するか、または既知の単語の数を1だけ更新するSQL文を実行するケースです。

EDIT以下のコメント

ポイント1 - 手順は、この

ように見える周波数リスト

//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(); 
    } 
} 

のストア言葉 - 言葉

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

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

ポイント3のリストを作成

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 

そして、ワードリストテーブルが2つのフィールド単語(varchar型)と周波数(int型)

ポイント2持っている - 出力star'd言葉

をまあ、これは今から選択する場合でなければなりませんWordListテーブル

+0

はい、私はデータベースとの対話なしでこれを行う方法を理解しています。しかし、アプリケーションの全体的なポイントは、データベースを使用するので、私は何をしようとしているのです – user1300788

+0

あなたは全体のポイントは、周波数リストは、データベースから取得し、取得可能でなければならないことを意味ですか? –

+0

"* brown"を2回入力するとうん。それはデータベースに保存され、2回カウントされます。 "* brown 2"という文字が印刷されます。 – user1300788

関連する問題