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ć ?