2017-01-25 12 views
-1

Следующий код работал отлично этим утром, но теперь дает «Должен объявить скалярную переменную» @Quantity «Я пробовал много предложений на этом и других сайтах, но все равно не решит проблему. Единственное изменение, которое я внес в форму с сегодняшнего утра, было то, что я добавил флажок. Я попытался удалить @Quantity var, и ошибка просто отправляется на @operator (следующий в строке). Мой код, который дает ошибку, находится ниже:Должен объявить скалярную переменную

protected void Button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection TSTTWI = new SqlConnection("Data Source=TS-ERP01;Initial Catalog=TST-TWI;Integrated Security=True"); 
     { 
      SqlCommand nc = new SqlCommand ("Insert into NCM (Quantity, Operator, NonConformance, Date, Description, PN, RMA) Values (@Quantity, @Operator, @NonConformance, @Date, @Description, @PN, @RMA)", TSTTWI); 


      TSTTWI.Open(); 
      nc.ExecuteNonQuery(); 
      TSTTWI.Close(); 


      nc.Parameters.AddWithValue("@Quantity", txtQuantity.Text); 
      nc.Parameters.AddWithValue("@Operator", txtName.Text); 
      nc.Parameters.AddWithValue("@NonConformance", txtNonConf.Text); 
      nc.Parameters.AddWithValue("@Date", txtDate.Text); 
      nc.Parameters.AddWithValue("@Description", txtDescript.Text); 
      nc.Parameters.AddWithValue("@PN", DDPartNo.Text); 
      nc.Parameters.AddWithValue("@RMA", txtRMA.Text); 





      if (IsPostBack) 
      { 
+0

ли весь текст столбцов базы данных, в том числе количества и даты? – stuartd

+5

Вы заметили, что перед добавлением параметров в свою команду у вас есть ExecuteNonQuery? Где предполагается найти параметры команды при ее выполнении? – Steve

+0

@Steve - но этот код работал отлично по утрам;) – ymz

ответ

2

Казалось бы, что вы пытаетесь выполнить пс, прежде чем добавлять параметры. Может быть, попробуйте переместить этот блок ниже той части, где вы добавляете параметры.

nc.Parameters.AddWithValue("@Quantity", txtQuantity.Text); 
nc.Parameters.AddWithValue("@Operator", txtName.Text); 
nc.Parameters.AddWithValue("@NonConformance", txtNonConf.Text); 
nc.Parameters.AddWithValue("@Date", txtDate.Text); 
nc.Parameters.AddWithValue("@Description", txtDescript.Text); 
nc.Parameters.AddWithValue("@PN", DDPartNo.Text); 
nc.Parameters.AddWithValue("@RMA", txtRMA.Text); 

TSTTWI.Open(); 
nc.ExecuteNonQuery(); 
TSTTWI.Close(); 
+0

Да, может быть ..... – Steve

+0

Спасибо @ Стив - да, довольно немой с моей стороны. –

0

Вы производите наказание за неправильные вещи одновременно.

TSTTWI.Open(); 
nc.ExecuteNonQuery(); 
TSTTWI.Close(); 

С помощью этого кода вы открываете соединение, выполняя команду и закрывая соединение. Тогда ниже этой линии вы начинаете добавлять параметры

nc.Parameters.AddWithValue("@Quantity", txtQuantity.Text); 
nc.Parameters.AddWithValue("@Operator", txtName.Text); 
.... 

Правильный путь:

try{ 
    TSTTWI.Open(); 

    nc.Parameters.AddWithValue("@Quantity", txtQuantity.Text); 
    nc.Parameters.AddWithValue("@Operator", txtName.Text); 
    .... 

    nc.ExecuteNonQuery(); 
    TSTTWI.Close(); 
} 
catch(Exception exception){ 

//log the exception somewhere 
} 
+0

@geekzster Первоначально, когда я вставил свой код, у меня был log4net, регистрирующий исключение в базе данных, поэтому я подумал, что не имеет смысла публиковать этот код, поэтому я оставил его пустым только для просмотра. Я обновил его с комментарием –

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