2012-05-02 95 views
0

好吧,這應該添加一個新的hashtag到數據庫,如果它尚不存在,否則它應該增加計數器。SQL Server參數C#

但是,到目前爲止它所做的只是增加新的,即使它們是相同的。所以我有很多相同的主題標籤,全部都有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搜索被實現爲這樣

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

變量'我'在其他地方修改?在提供的樣本中,它將始終具有相同的值。另外,在客戶端實現自動增量,這是非常非常糟糕的做法。 – Dennis

回答

0

嘗試使用前綴增量,而不是postfix的。像這樣:

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

我沒有得到你想要的計數器。 計數器將永遠給你價值1,因爲你把它

int i; 

I = 1

即使你使用i++

如果您的意思是該計數器是標籤編號,則可以在數據庫中聲明列「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

很難從提供的代碼中看出來,但看起來這個代碼總是會找到hashtag或添加counter = 1的新行。如果我明白你想要正確做什麼,你想找到hashtag的行,然後更新它的「計數器」值。如果找不到,請插入計數器= 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