簡體   English   中英

在一個查詢中插入並選擇

[英]Insert and select in one query

我有一個查詢

 insert into carsdescription
 (description,idCar) 
 value (@description,@idCar)
 where idCar=@idCar;
 select nameOfCar
 from Cars 
 where idCar=@idCar";

如何在一個sqlCommand中執行此操作?

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

        // your proposition    
    }
}

表架構:

汽車說明:

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

汽車

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

您是否正在嘗試將數據從一個表復制到另一個表?

就像是

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

這會將所有“ nameOfCar”值復制到CarsDescription表中。 如果您不想重復,請將SELECT更改為SELECT DISTINCT

insert into carsdescription (description) value (@description) where idCar=@idCar;

插入...在哪里?

(不是我知道您實際上要做什么,但是該查詢首先不會起作用)

你不能。 不在一個語句中。 你為什么要這么做? 您有什么想法或要求?

您必須首先使用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();
}

創建一個存儲過程,該存儲過程將Description和IDCar作為參數,並返回標量NameOfCar或Cars表中的結果集。 然后,您可以使用C#代碼中的單個命令來調用該存儲過程。

在單個調用中執行完全有效。 可能不建議這樣做,但是有可能。

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

好吧,我也找到了一種方法,我知道這很麻煩,但是我也是一個初學者,所以我為自己做了以下工作。

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

但是,此答案與您的問題無關,但是我已經嘗試了自己的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM