2016-08-27 3 views
-2

«Список выбора для заявления ВСТАВКИ содержит меньше элементов, чем список вставки. Число выбора значений должно соответствовать числу INSERT столбцов.»C# Синтаксис SQL Error Select ... Вставьте

У меня есть вопрос, что это? Построение моих кодов?

private void btnCheckOut_Click(object sender, EventArgs e) 
     { 
      DialogResult res = MessageBox.Show("Are you done adding your items?","Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      if (res == DialogResult.Yes) 
      { 
       Conn = k.getConn(); 
       Conn.Open(); 
       str = "INSERT INTO Items (itemCode, itemBrand, itemColor , qty) SELECT itemCode, itemBrand, itemColor FROM Purchase"; 
       cmd = new SqlCommand(str, Conn); 
       cmd.ExecuteNonQuery(); 
       dr = cmd.ExecuteReader(); 
       cmd.Dispose(); 
       Conn.Close(); 

      MessageBox.Show("Successfully Added to your CART" ,"Message", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
     else if (res == DialogResult.No) 
     { 

     } 
    }` 

И я хочу передать, что в базе данных с именем Items

+0

Список столбцов «Вставить» имеет ** четыре столбца ** и список столбцов 'Выбрать' ** три ** столбца. –

+0

И какова цель вызова ExecuteReader после ExecuteNonQuery? – Steve

+0

'INSERT INTO Элементы (itemCode, itemBrand, itemColor, qty) SELECT itemCode, itemBrand, itemColor, qty FROM Purchase' –

ответ

0

В следующем запросе:

str = "INSERT INTO Items (itemCode, itemBrand, itemColor , qty) SELECT itemCode, itemBrand, itemColor FROM Purchase"; 
cmd = new SqlCommand(str, Conn); 

вы должны пройти точно четыре названия столбцов в запросе на выборку, так что список clumn совпадает со списком столбцов вставки запроса. Если вы хотите получить данные для столбца количества, удалите его из запроса INSERT.
Вы также можете установить значение по умолчанию для столбца количества в своей базе данных, чтобы убедиться, что оно получает интегральное значение по умолчанию вместо NULL.

Secondaly, нет необходимости использовать следующее заявление после ExecuteNonQuery():

dr = cmd.ExecuteReader(); 

, потому что вы ничего с данными, которые могут быть conming к д-р не делаешь.
Вместо этого, если вы пытаетесь получить количество строк, затронутых в запросе вставки вы можете использовать следующий код:

int cnt = cmd.ExecuteNonQuery(); 

, а затем показать значение этой переменной, где когда-либо вы хотите, может быть в метка.


Надеюсь, это поможет.

+0

См., ExecuteReader возвращает набор результатов, содержащий данные, выбранные с помощью оператора select. Он строго используется для выборки Пожалуйста, скажите мне, как использовать Exec uteReader в вашем коде, чтобы я мог лучше вас вести. –

+0

Это действительно РАБОТАЕТ спасибо!и последний вопрос, что я буду делать с –

+0

. Мне нужна ваша помощь .. это правильно? @Shobit Gupta INSERT INTO Элементы (itemCode, itemBrand, itemColor, qty, itemPrice) SELECT itemCode, itemBrand, itemColor, qty, "+ tb1.Text" + " –

1

В запросе для insert есть 4 колонки

INSERT INTO Items (itemCode, itemBrand, itemColor , qty) 

в select есть только 3 колонки

SELECT itemCode, itemBrand, itemColor FROM Purchase 

Он должен быть следующим:

INSERT INTO Items (itemCode, itemBrand, itemColor , qty) 
SELECT itemCode, itemBrand, itemColor,qty FROM Purchase 
+0

Что делать, если я добавляю что-то вроде этого, проверьте, правильно это или нет. INSERT INTO Элементы (itemCode, itemBrand, itemColor, qty, itemPrice) SELECT itemCode, itemBrand, itemColor , qty, "+ tb1.Text" + "@Berkay –

+0

@AllemMontinola Я не являюсь владельцем решения, я только что скорректировал формат. – Berkay

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