2010-03-03 45 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

如果這是一個花生,我一直在吃零食? – 2010-03-03 16:15:18

+0

請顯示您的表格架構。 – ChaosPandion 2010-03-03 16:20:05

回答

2

你不能。不在一個聲明中。爲什麼你甚至想?你的想法是什麼,或者你的要求是什麼?

您必須首先使用cmd.ExecuteNonQuery調用來插入新數據,然後您需要使用cmd.ExecuteReader再次調用或使用SqlDataAdapter填充DataTable以再次檢索數據。

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 2010-03-03 16:26:01

+0

好吧,這就是我的答案:) – user278618 2010-03-03 16:26:44

+1

我很抱歉馬克,但你錯了。請參閱下面的答案。 – 2010-03-03 16:46:20

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

INSERT ... WHERE?

(不,我知道你實際上試圖做的,但該查詢不會在第一個工作的地方)

+0

我已經糾正了它 – user278618 2010-03-03 16:31:46

+0

我認爲他的評論是指一個事實,即插入語句的Where子句是無稽之談。 – 2010-03-03 16:35:29

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

這是一種可能性 - 真正的原始問題並不十分清楚。 – 2010-03-03 17:03:23

+0

@marc_s,是的,我知道......我不確定他是否試圖返回剛插入的行,或試圖從select中插入。 – CaffGeek 2010-03-03 17:15:46

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); 
       } 
      } 
     }  

但是,這個答案與你的問題無關,但我嘗試了我自己的解決方案。