2016-07-19 5 views
0

Я выполняю функцию для загрузки файлов в папку с помощью C#. Это происходит и ошибка, в которой ошибка «Должна объявить скалярную переменную« @TABLE_ID »после того, как я нажал кнопку« Загрузить ». Я провел некоторое исследование и попытался использовать другие примеры, но ошибка все еще возникает. Это функция для загрузки:ОШИБКА - Должен декларировать Scalar Variable - C#

.
protected void UploadFile(object sender, EventArgs e) 
    { 
     string str = ConfigurationManager.ConnectionStrings["Ulysses"].ConnectionString; 
     string filenam = FileUpload1.FileName.ToString(); 
     string TABLE_NAME = "REQUEST"; 

     int table_id = -1; 
     table_id = generateNextId("SP_LINK_TABLE_FIELD_ID"); 

     string path = @"C:\Users\muhd\Documents\CyberLink"; 

     path = path + filenam; 
     FileUpload1.PostedFile.SaveAs(path); 

     SqlConnection con = new SqlConnection(str); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandText = "Insert into OLE(LINK_TABLE_ID, LINK_TABLE_NAME, OLE_LINK_FILE_NAME) values(@TABLE_ID,@TABLE_NAME,@FILE_NAME)"; 
     cmd.CommandType = CommandType.Text; 
     command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id; 
     command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME); 
     command.Parameters.AddWithValue("@FILE_NAME",path); 
     cmd.Connection = con; 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
    } 

table_id берется из хранимой процедуры с помощью другой функции Пожалуйста, обратитесь ниже:

protected int generateNextId(string strStoredProcedureName)//this is for inserting table_field_id for uploading attachment 
    { 
     int intNewId = 0; 
     try 
     { 
      strConn = ConfigurationManager.ConnectionStrings["Ulysses"].ToString(); 
      conn = new SqlConnection(strConn); 
      command = new SqlCommand(strStoredProcedureName, conn); 
      command.CommandType = CommandType.StoredProcedure; 
      command.Parameters.Add("@newid", SqlDbType.Int); 
      command.Parameters["@newid"].Direction = ParameterDirection.ReturnValue; 
      conn.Open(); 
      command.ExecuteNonQuery(); 
      intNewId = (int)command.Parameters["@newid"].Value; 
     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 
      conn.Close(); 
      conn = null; 
     } 
     return intNewId; 
    } 
    } 

Это хранимая процедура, которую я использую:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[SP_LINK_TABLE_FIELD_ID] 
AS 
begin tran; 
declare @nextid integer; 
update generator set current_number = current_number + 1 where generator = 'LINK_TABLE_FIELD'; 
select @nextid = current_number from generator where generator = 'LINK_TABLE_FIELD'; 
commit tran; 
return @nextid; 

Я не уверен, почему нужно было объявить, что даже другие функции с одним и тем же стилем не имеют проблем с кодом, но этот показывает эту ошибку. Я надеюсь, что кто-нибудь может дать некоторое представление об этой проблеме. Заранее спасибо.

+0

после хранимая процедура – Sachu

+1

Вы настройка запроса к переменной 'cmd' но хочет назначить параметры переменной' command'. Что-то там не просто совпало. – Bobby

+0

@Sachu Извините, забыл. Уже отправлена ​​хранимая процедура. – namasayadin

ответ

3

Команда, которую вы выполняете, - cmd, а не command. Вы не добавляете параметры в правильный объект команды.

command.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id; 
command.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME); 
command.Parameters.AddWithValue("@FILE_NAME",path); 

должен быть:

cmd.Parameters.AddWithValue("@TABLE_ID", SqlDbType.Int).Value = table_id; 
cmd.Parameters.AddWithValue("@TABLE_NAME", TABLE_NAME); 
cmd.Parameters.AddWithValue("@FILE_NAME",path); 
+0

@DenisWessels Он может добавлять параметры к другому глобальному объекту. Таким образом, SQL обрабатывает '@ TABLE_ID' как скалярную переменную запроса, которая не найдена. 'SqlCommand' не заменяет его значением. Это проблема с именем переменной в его случае. – user3185569

+0

Да, я не знаю о несогласованности команды cmd и. Спасибо, что посмотрели, где я ошибся. – namasayadin