2013-09-10 4 views
1

У меня есть хранимая процедура, называемая SelFromWeather2, и мне нужно вернуть значения из таблицы. Когда я выполняю проверку синтаксиса, я не получаю ошибок, но когда я вызываю его из C#, я получаю синтаксическую ошибку около SelFromWeather2.Сохраненная процедура в SQL Server; Синтаксическая ошибка

Вот код:

CREATE PROCEDURE SelFromWeather2 
@location VARCHAR(MAX), 
@des VARCHAR(200) OUTPUT, 
@min INT OUTPUT, 
@max INT OUTPUT, 
@humidity INT OUTPUT, 
@pressure INT OUTPUT, 
@speed INT OUTPUT, 
@date Datetime OUTPUT 
AS 
IF EXISTS(SELECT * FROM Weather2 WHERE LOCATION LIKE @location) 
BEGIN 

CREATE TABLE T 
(
forc XML, 
loc VARCHAR(MAX), 
dat Datetime 
); 

INSERT INTO T(forc, loc, dat) SELECT TOP 1 [FORECAST],[LOCATION],[DATE] FROM Weather2 
WHERE LOCATION LIKE @location ORDER BY DATE DESC; 

SET @location=(SELECT loc FROM T); 
SET @location =(SELECT loc FROM T); 
SET @des= (SELECT forc.value('(/Weather//Forecast/Description/node())[1]', 'nvarchar(max)') FROM T); 
SET @min= (SELECT forc.value('(/Weather//Forecast/MinTemp/node())[1]', 'int') FROM T); 
SET @max=(SELECT forc.value('(/Weather//Forecast/MaxTemp/node())[1]', 'int') FROM T); 
SET @humidity=(SELECT forc.value('(/Weather//Forecast/Humidity/node())[1]', 'int') FROM T); 
SET @pressure= (SELECT forc.value('(/Weather//Forecast/Pressure/node())[1]', 'int') FROM T); 
SET @speed=(SELECT forc.value('(/Weather//Forecast/Speed/node())[1]', 'int') FROM T); 
SET @date= (SELECT forc.value('(/Weather//Forecast/Date/node())[1]', 'Datetime') FROM T); 

DROP TABLE T; 
END 

код для вызова этой процедуры является:

  string location = "Paris"; 

      SqlDataReader myReader = null; 
      SqlCommand myComand = new SqlCommand("SelFromWeather2", myConnection); 
      myComand.Parameters.AddWithValue("@location", location); 

      SqlParameter min = myComand.Parameters.Add("@min", System.Data.SqlDbType.Int); 
      SqlParameter max = myComand.Parameters.Add("@max", System.Data.SqlDbType.Int); 
      SqlParameter humidity = myComand.Parameters.Add("@humidity", System.Data.SqlDbType.Int); 

      SqlParameter pressure = myComand.Parameters.Add("@pressure", System.Data.SqlDbType.Int); 
      SqlParameter speed = myComand.Parameters.Add("@speed", System.Data.SqlDbType.Int); 
      SqlParameter dat = myComand.Parameters.Add("@date", System.Data.SqlDbType.DateTime); 
      SqlParameter des = myComand.Parameters.Add("@des", System.Data.SqlDbType.VarChar, 200); 
      min.Direction = System.Data.ParameterDirection.Output;    
      max.Direction = System.Data.ParameterDirection.Output; 
      humidity.Direction = System.Data.ParameterDirection.Output; 
      pressure.Direction = System.Data.ParameterDirection.Output; 
      speed.Direction = System.Data.ParameterDirection.Output; 
      dat.Direction = System.Data.ParameterDirection.Output; 
      des.Direction = System.Data.ParameterDirection.Output; 

      myComand.ExecuteReader(); 


      int minTemp = (int)min.Value; 
      int maxTemp = (int)max.Value; 
      int hum = (int)humidity.Value; 
      int press = (int)pressure.Value; 
      int wind = (int)speed.Value; 
      string description = des.Value.ToString(); 
      DateTime datum = (DateTime)dat.Value; 

Пожалуйста, помогите, я застрял!

+0

Какое сообщение об ошибке вы получаете? Кроме того, вы должны использовать временную таблицу (см. Здесь: http://technet.microsoft.com/en-us/library/ms174979.aspx, поиск временных таблиц). – rsbarro

+0

Я пробовал также SELECT @ location = loc FROM T, но также сохранял такую ​​же ошибку. – Edna

+0

Точная ошибка: Неправильная синтаксическая ошибка рядом с SelFromWeather2 – Edna

ответ

4

Набор CommandType из МояКоманда в StoredProcedure

4

Вы должны установить CommandType в StoredProcedure

myCommand.CommandType = CommandType.StoredProcedure 

default является текст.

Смежные вопросы