2012-05-02 2 views
0

Хорошо, это должно добавить новый хэштег в базу данных, если он еще не существует, иначе он должен увеличивать счетчик.Параметры 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(); 

хэштегом Поиск реализован в такой

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

Я не получаю счетчик, что вы хотите. счетчик всегда даст вам значение 1, так как вы настроили его

int i; 

I = 1

даже если вы используете i++.

Если вы имеете в виду, что счетчик - это hashtag number, вы можете объявить в базе данных, что столбец «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 
Смежные вопросы