2012-05-02 11 views
0

OKこれは、データベースに新しいハッシュタグを追加する必要があります。存在しない場合は、カウンタをインクリメントする必要があります。SQL ServerのパラメータC#

ただし、同じものであっても、これまでのすべてで新しいものが追加されています。だから、私は同じハッシュタグをたくさん持っています。

HashTagReader r = new HashTagReader(); 

int i; 
i=1; 

if (r.HashTagSearch(s)) 
    MessageBox.Show("I Found it!"); 

else 
{ 
    SqlCommand myCommand = new SqlCommand("INSERT INTO dbo.Table1 (HashTag, Counter) Values (@HashTag,@Counter)", connection); 

    myCommand.Parameters.Add("@HashTag", SqlDbType.VarChar, 50).Value = s; //Your hashTagvalue 
    myCommand.Parameters.Add("@Counter", SqlDbType.VarChar, 50).Value = i++; //Your Counter Value 
    myCommand.ExecuteNonQuery(); 
} 

connection.Close(); 

ハッシュタグの検索は、このような

public bool HashTagSearch(string hashtagstring) 
{ 
     SqlConnection connection = new SqlConnection(); 
     connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Jordan Moffat\Desktop\coursework\WindowsFormsApplication1\WindowsFormsApplication1\HashTags.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 
     // SqlConnection connection = new SqlConnection(); 
     // connection.ConnectionString = "C:/Users/Jordan Moffat/Desktop/coursework/WindowsFormsApplication1/WindowsFormsApplication1/HashTags.mdf"; //Your connection string 
     SqlCommand command = new SqlCommand(); 
     command.Connection = connection; 
     command.CommandType = CommandType.StoredProcedure; 
     command.CommandText = "FindString"; 
     command.Parameters.AddWithValue("@MyString", hashtagstring); 
     try 
     { 
      connection.Open(); 
      SqlDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       return true; 
      } 
     } 
      catch (Exception) 
    { 
     // MessageBox.Show("heel"); 
    } 
    finally 
    { 
     if (connection.State == ConnectionState.Open) 
      connection.Close(); 
    } 
    return false; 
} 
    } 
+6

HashTagSearchはどのように実装されていますか? – alexn

+0

あなたが必要とするのは '++ i'です – V4Vendetta

+0

変数 'i'は他の場所で変更されていますか?提供されるサンプルでは、​​常に同じ値を持ちます。また、クライアント側での自動インクリメントの実装は、非常に悪い習慣です。 – Dennis

答えて

0

として実装されているが、プレフィックスの増分ではなく、接尾辞を使用してみてください。このように:

myCommand.Parameters.Add("@Counter", SqlDbType.VarChar, 50).Value = ++i; 
0

私はあなたが望むものを得ることができません。あなたはi++を使用している場合でも、それを

int i; 

I = 1

を設定しているため カウンターは常に、あなたが1を評価得られます。

カウンタがハッシュタグ番号であることを意味する場合は、データベース内で "counter"列が自動インクリメントされたインデックスであることを宣言できます。

0

以下のようなクエリをストアドプロシージャで試すことができます。

IF EXISTS (SELECT * FROM dbo.Table1 WHERE HashTag = @HashTag) 
UPDATE dbo.Table1 SET Counter = @Counter+1 
ELSE 
INSERT INTO dbo.Table1 (HashTag, Counter) Values (@HashTag,@Counter) 
2

これは、提供されたコードから伝えるのは難しいですが、このコードは、常にどちらかのハッシュタグを検索したり、カウンター= 1で新しい行が追加されますように見えます。あなたが正しくしようとしていることを理解しているならば、ハッシュタグの行を見つけて "カウンタ"値を更新したいと思う。見つからなければ、counter = 1の新しい行を挿入します。

トランザクションでラップされた更新/挿入を実行するストアドプロシージャを作成することをお勧めします。

CREATE PROC InsertOrUpdateHashTag 
(
    @hashtag nvarchar(100) 
) 
AS 
BEGIN TRAN 
    UPDATE Table1 SET Counter+=1 WHERE Hashtag = @hashtag 
    IF @@ROWCOUNT = 0 
    BEGIN 
     INSERT Table1 (Hashtag, Counter) VALUES (@hashtag,1) 
    END 
COMMIT TRAN 
関連する問題