2010-03-03 2 views
1

У меня есть запросВставить и выберите в одном запросе

insert into carsdescription 
(description,idCar) 
value (@description,@idCar) 
where [email protected]; 
select nameOfCar 
from Cars 
where [email protected]"; 

Как в одном SQLCommand выполнить это ??

using(SqlConnection conn=new SqlConnection(connString)) 
{ 
    using(sqlCommand cmd=new SqlCommand()) 
    { 
     cmd.Parameteres, conn etc... //this is a peanut 

     // your proposition  
    } 
} 

схема таблицы:

Carsdescription:

ID (PK, int, autoincrement) 
idcar(FK, int) 
Description(varchar) 

Автомобили

Id(int, PK, autoincrement) 
Name(nvarchar(255) 
+5

Если это арахис, то что я перекусил? –

+0

Пожалуйста, покажите схему своего стола. – ChaosPandion

ответ

2

Вы не можете. Не в одном заявлении. Почему вы даже хотите? Какова ваша идея или ваше требование?

Сначала необходимо ввести вызов для ввода новых данных, а затем вам понадобится второй вызов, используя cmd.ExecuteReader или заполнив DataTable с помощью SqlDataAdapter, чтобы снова получить данные.

using(SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 

    string cmdInsert = "insert into carsdescription(description) value (@description)"; 

    using(sqlCommand cmd = new SqlCommand(cmdInsert, conn)) 
    { 
     cmd.Parameters.AddWithValue("@description", description); 
     cmd.ExecuteNonQuery(); 
    } 

    string selectStmt = "select nameOfCar from dbo.Cars where idCar = @idCar"; 

    using(sqlCommand cmd2 = new SqlCommand(selectStmt, conn)) 
    { 
     cmd2.Parameters.AddWithValue("@idCar", idCar); 

     string resultValue = cmd2.ExecuteScalar().ToString(); 
    } 

    conn.Close(); 
} 
+0

почему нет? я уверен, что это возможно! – Andrey

+0

хорошо, это ответ для меня хорошо :) – user278618

+1

Простите, Марк, но вы ошибаетесь. См. Мой ответ ниже. –

2
insert into carsdescription (description) value (@description) where [email protected]; 

INSERT ... ГДЕ ??

(не то, что я знаю, что вы на самом деле пытаетесь сделать, но этот запрос не будет работать в первую очередь)

+0

Я исправил его – user278618

+0

Я думаю, что его комментарий имел в виду тот факт, что предложение Where в выражении вставки является бессмысленным. –

0
using (SqlCommand cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = your_query; 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.Add(new SqlParameter("@description", description)); 
     cmd.Parameters.Add(new SqlParameter("@idCar", idCar)); 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      //reader here 
     } 
    } 
3

Вы пытаетесь скопировать данные из одной таблицы в другую?

Что-то вроде

INSERT INTO CarsDescription (description) 
    SELECT nameOfCar 
     FROM Cars 
     WHERE idCar = @idCar 

Это скопирует все ценности 'nameOfCar' в таблицу CarsDescription. Если вы не хотите дубликаты изменить ВЫБРАТЬ к SELECT DISTINCT

+0

Это одна из возможностей - на самом деле вопрос об этом не совсем понятен. –

+0

@marc_s, да, я знаю ... Я не был уверен, пытался ли он вернуть только что вставленные строки или попытаться вставить из выделения. – CaffGeek

2

Создайте хранимую процедуру, которая принимает Описание и IDCar в качестве параметров и возвращают либо скалярную NameOfCar или иначе результирующий набор из таблицы Автомобилей. Затем вы можете вызвать эту хранимую процедуру с помощью одной команды из вашего кода на C#.

2

Это вполне допустимо для выполнения одним звонком. Это не рекомендуется, но это возможно.

using (SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=JunkBox;Integrated Security=SSPI;")) 
      { 
       SqlCommand cmd = new SqlCommand("INSERT INTO JunkSO(Id, Name) VALUES(@Id, @Description) SELECT * FROM JunkSO", conn); 
       cmd.Parameters.AddWithValue("@Id", 10); 
       cmd.Parameters.AddWithValue("@Description", "TestDescription"); 
       conn.Open(); 
       using (SqlDataReader rd = cmd.ExecuteReader()) 
       { 
        if (rd.HasRows) 
        { 
         while (rd.Read()) 
         { 
          MessageBox.Show(rd[0].ToString() + " " + rd[1].ToString()); 
         } 
        } 
       } 
      } 
0

Ну, я нашел один способ, я знаю, что это грязно, но я тоже новичок, так что я сделал так для себя.

SqlConnection add = new SqlConnection(ConfigurationManager.ConnectionStrings["sismanager"].ConnectionString); 
     SqlCommand additem = new SqlCommand("INSERT INTO Godown(Gname, Gstock) VALUES(@Gname, @Gstock)", add); 
     additem.Parameters.AddWithValue("@Gname", textBox1.Text.Trim()); 
     additem.Parameters.AddWithValue("@Gstock", textBox2.Text.Trim()); 
     try 
     {    
      add.Open(); 
      additem.ExecuteNonQuery();    
     } 
     catch 
     { 

     } 
     finally 
     { 
      add.Close(); 

      dataGridView1.Columns.Clear(); 
      SqlConnection setcon = new SqlConnection(ConfigurationManager.ConnectionStrings["sismanager"].ConnectionString); 
      using (SqlCommand getdata = new SqlCommand("SELECT Gid, Gname, Gstock FROM Godown ORDER BY Gname ASC", setcon)) 
      { 
       setcon.Open(); 
       SqlDataAdapter da = new SqlDataAdapter(getdata); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       if (dt.Rows.Count > 0) 
       { 
        comboBox1.DisplayMember = "Gname"; 
        comboBox1.ValueMember = "Gid"; 
        comboBox1.DataSource = dt; 

        dataGridView1.DataSource = dt; 
        dataGridView1.Columns[0].HeaderText = "Item Id"; 
        dataGridView1.Columns[1].HeaderText = "Item"; 
        dataGridView1.Columns[2].HeaderText = "Item Stock"; 

        DataGridViewButtonColumn deletebtn = new DataGridViewButtonColumn(); 
        dataGridView1.Columns.Add(deletebtn); 
        deletebtn.HeaderText = "Remove"; 
        deletebtn.Text = "Remove"; 
        deletebtn.Name = "Dbtn"; 
        deletebtn.UseColumnTextForButtonValue = true; 
       } 
       else 
       { 
        MessageBox.Show("No Stock Items to Show", "Stock Details", MessageBoxButtons.OK, MessageBoxIcon.Information); 
       } 
      } 
     }  

Однако этот ответ не имеет отношения к вашему вопросу, но я пробовал свое решение.