0

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

ただし、これまでのところ、同じであっても、新しいものを追加するだけです。だから私はたくさんの同じハッシュタグを持っています、すべて1です。何か提案はありますか?

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;
}
    }
4

4 に答える 4

2

提供されたコードから見分けるのは難しいですが、このコードは常にハッシュタグを見つけるか、counter=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
于 2012-05-02T05:30:21.500 に答える
0

私はあなたが望むもののカウンターを取得しません。あなたがそれを設定するので、カウンターは常にあなたに値1を与えます

int i;

i = 1

使用してもi++

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

于 2012-05-02T05:28:29.163 に答える
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)
于 2012-05-02T05:30:14.217 に答える
0

後置ではなく、前置増分を使用してみてください。このような:

myCommand.Parameters.Add("@Counter", SqlDbType.VarChar, 50).Value = ++i;
于 2012-05-02T05:22:03.197 に答える