2012-05-02 5 views
0

Ok, cela devrait ajouter un nouveau hashtag à la base de données si elle n'existe pas déjà, sinon elle devrait incrémenter le compteur.Paramètres SQL Server C#

Cependant, tout ce qu'il fait jusqu'à présent, c'est d'en ajouter de nouveaux, même s'ils sont identiques. J'ai donc beaucoup de hashtags identiques, tous avec 1. Des suggestions?

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(); 

La recherche HashTag est mis en œuvre en tant que telle

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

Comment HashTagSearch est-il implémenté? – alexn

+0

Peut-être que ce dont vous avez besoin est '++ i' – V4Vendetta

+0

Est-ce que la variable 'i' est modifiée ailleurs? Dans l'échantillon fourni, il aura toujours la même valeur. En outre, la mise en œuvre de l'auto-incrémentation du côté client est une très, très mauvaise pratique. – Dennis

Répondre

0

Essayez d'utiliser incrément de préfixe, Postfix. Comme ceci:

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

Je ne reçois pas le compteur que ce que vous voulez. compteur toujours vous donner la valeur 1, parce que vous définissez

int i; 

i = 1

Même si vous utilisez i++. Si vous voulez dire que ce compteur est un nombre de hashtag, vous pouvez déclarer dans la base de données que la colonne "compteur" est un index auto-incrémenté.

0

Vous pouvez essayer avec la requête comme ci-dessous avec la procédure stockée.

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

Il est difficile de dire à partir du code fourni, mais ressemble à ce code sera toujours trouver soit le hashtag ou ajouter une nouvelle ligne avec compteur = 1. Si je comprends ce que vous essayez de faire correctement, vous voulez trouver la ligne pour le hashtag, puis mettre à jour sa valeur "compteur". Si introuvable, insérez une nouvelle ligne avec compteur = 1.

Je recommanderais d'écrire une procédure stockée qui effectue la mise à jour/insertion enveloppé dans une transaction.

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