2012-05-02 11 views
1

SQLテーブルにトレンドを格納できるプログラムを作成しようとしています。テキストボックスに入力されたハッシュタグをデータベースに追加して、それがまだ存在していない場合は追加してから、カウンタを1だけインクリメントする必要があります。SQLの挿入/カウンタのインクリメント

最初の列は "HashTag"で、2番目の列は " (10)とintプロパティをそれぞれ示します。

私はSQLを使い慣れていないので、少し問題があります。これは私がこれまで持っていたものです。

SqlConnection connection = new SqlConnection(); 
connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Jordan Moffat\Desktop\coursework\WindowsFormsApplication\WindowsFormsApplication\HashTags.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 
connection.Open(); 
HashTagReader r = new HashTagReader(); 
if (r.HashTagSearch(s)) 
    MessageBox.Show("I Found it!"); 
else 
{ 
    SqlCommand myCommand = new SqlCommand("INSERT INTO tblHashTag (HashTag, Counter) " + "Values (s, ++)", connection); 
    myCommand.ExecuteNonQuery(); 
} 
connection.Close(); 

お勧めはありますか?

答えて

1

カウンター列をID(1,1)に変更すると、自動的にインクリメントされます。これはSQL Management Studioで簡単に実行できます。

SqlCommand myCommand = new SqlCommand("INSERT INTO tblHashTag (HashTag) Values ('" + s + '")", connection); 

注:

その後にあなたのクエリを変更する私は、SqlCommandオブジェクトは、IDisposableを実装したDbCommandから継承されますと信じています。

using(SqlCommand myCommand = new SqlCommand("INSERT INTO tblHashTag (HashTag) Values ('" + s + '")", connection)) 
{ 
    ... 
} 
+0

今、私はSQLマネージャーをダウンロードしていますので、これがどのようになるかを見ていきます。現在、ビルドエラーはありませんが、明らかにまだインクリメントされていません。 –

0

SQL Server 2005の上で再あなたは(あなたがあればすべき重複挿入を避けるために、答えはクリスに追加するには、次のように任意のアンマネージリソースをクリーンアップするようにあなたは、使用して()文でこれらのオブジェクトをラップする必要がありますHashTag列に一意なインデックスを追加して制限を適用します。

コードでは、WHERE NOT EXISTS句を使用する必要があります。ここを参照してください:SQL Server insert if not exists best practice

だから、あなたが羽目になるだろう:

"INSERT INTO tblHashTag (HashTag) 
      Values ('" + s + "') 
WHERE NOT EXISTS (SELECT HashTag 
        FROM tblHashTag 
        WHERE HashTag = '" + s + '")" 
0

は、SQLインジェクションを防ぐためにパラメータを使用することができます。

string hashtag = "Your HashTagValue"; 
    string counter = "Your Counter Value"; 

    SqlCommand myCommand = new SqlCommand("INSERT INTO tblHashTag (HashTag, Counter) Values (@HashTag,@Counter)", connection); 
    myCommand.Parameters.Add("@HashTag", SqlDbType.varchar,50).Value = hashtag; //Your hashTagvalue 
    myCommand.Parameters.Add("@Counter", SqlDbType.varchar,50).Value = counter; //Your Counter Value 

    myCommand.ExecuteNonQuery(); 
+0

私はこの問題を解決するために、カウンタをインクリメントする代わりに新しいハッシュタグを追加するだけです –

1

あなたはSQL 2008+にしている場合は、あなたが持っていますマージステートメントへのアクセス。次のようなものがあります:

ここでは出力句を使用していることを示しています。マージステートメントを複数回実行し、出力の変化を確認します。あなたが気晴らしていると感じたら、これを2つのパラメータ(ハッシュタグとカウンタ)が必要なストアドプロシージャにラップすれば、あなたは何か素敵なものになります。楽しい!