Blad MS-SQL: SqlCommand.Prepare method requires all parameters to have an explicitly set type

0

Witam, prosiłbym was o znalezienie błędu w procedurze. Dodam, że gdy podstawię zamiast @name jakąś wartość na sztywno, wszystko jest ok. Wina w sumie bardziej chyba leży w kodzie C# niż sql...

 

            int result = 0;

            if (this._connection.State == System.Data.ConnectionState.Open)
            {
                string query = @"USE TomkosBlog
                                 DECLARE @id int
                                   SET @id = (SELECT TOP(1) TagID FROM Tags WHERE Name = LOWER(@name));
                                 IF (@id IS NOT NULL)
                                   PRINT @id
                                 ELSE
                                 BEGIN
                                   INSERT INTO Tags(Name) VALUES(LOWER(@name))
                                   SELECT MAX(TagID) FROM Tags
                                 END";

                using (SqlCommand command = new SqlCommand(query, _connection))
                {
                    command.Parameters.Add(new SqlParameter("name", tag.Name));

                    SqlDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        result = (int)reader[0];
                    }
                }
            }

            return result;

Zapytanie wywołuje się bez błędu, ale nie zwraca wyniku (1) - a powinno. Nie wiem czy można deklarować w taki sposób zmienne w zapytaniach preparowanych ( **@id ** ), gdyż metoda jak wywołam command.Prepare() otrzymam
SqlCommand.Prepare method requires all parameters to have an explicitly set type.

Jak sobie z tym poradzić ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1