0

好的,如果它不存在,这应该向数据库添加一个新的标签,否则它应该增加计数器。

然而,到目前为止,它所做的只是添加新的,即使它们是相同的。所以我有很多相同的主题标签,都是 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();

HashTag Search 就是这样实现的

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

我没有得到你想要的柜台。counter 将始终为您提供值 1,因为您设置了它

int 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 回答