SqlCommand - 选择多行并将它们插入表中

时间:2013-09-03 10:03:08

标签: c# sql sql-server

您好我正在尝试从表中选择多行并将它们插入另一行我认为可以按以下方式完成:

此部分应选择多行:

 string sqcom = "SELECT text,castka,rocnik FROM zajsluz WHERE akce='"+tentoradek+"' and rocnik='"+klientClass.Rocnik()+"'";

                    SqlCommand sc = new SqlCommand(sqcom,spojeni);

                    spojeni.Open();
                    sc.ExecuteNonQuery();
                    spojeni.Close();

这是我尝试从SqlCommand sc中插入选定的行的方法:

  string sqlcom2 = "INSERT INTO zajsluz(akce,text,castka,rocnik) values (@akce,@text,@castka,@rocnik)";

                    SqlCommand sc2 = new SqlCommand(sqlcom2, spojeni);
                    sc2.Parameters.AddWithValue("@akce", klientClass.Rocnik());
                    sc2.Parameters.AddWithValue("@text", ); // I dont know how to define this parameter according to what was selected in SqlCommand sc
                    spojeni.Open();
                    sc2.ExecuteNonQuery();
                    spojeni.Close();

现在我想知道我可以从SqlCommand“sc”插入“@text”(sc2)参数值你能帮我解决这个问题吗?

提前致谢

编辑:¨

这是我试过的:

  DataSet dt2 = new DataSet();
                    SqlDataAdapter SDA2 = new SqlDataAdapter("SELECT text,castka FROM zajsluz WHERE akce='" + tentoradek + "' and rocnik='" + klientClass.Rocnik() + "'", spojeni);
                    SDA2.Fill(dt2);
                    spojeni.Close();
 string sqlcom2 = "INSERT INTO zajsluz(akce,text,castka,rocnik) values (@akce,@text,@castka,@rocnik)";

                    SqlCommand sc2 = new SqlCommand(sqlcom2, spojeni);
                    sc2.Parameters.AddWithValue("@akce", zakce.Text);
                    sc2.Parameters.AddWithValue("@rocnik", klientClass.Rocnik());
                    sc2.Parameters.AddWithValue("@text", dt2.Tables[0].Columns["text"]);
                    sc2.Parameters.AddWithValue("@castka", dt2.Tables[0].Columns["castka"]);
                    spojeni.Open();
                    sc2.ExecuteNonQuery();
                    spojeni.Close();

4 个答案:

答案 0 :(得分:1)

你可以直接使用insert into&选择组合

 string sqcom = "INSERT INTO zajsluz(akce,text,castka,rocnik) SELECT rocnik,text,castka,rocnik FROM zajsluz WHERE akce='"+tentoradek+"' and rocnik='" + klientClass.Rocnik() + "'"

    SqlCommand sc = new SqlCommand(sqcom,spojeni);

                        spojeni.Open();
                        sc.ExecuteNonQuery();
                        spojeni.Close();

答案 1 :(得分:0)

如果可能的话,我会尝试在单个语句中执行此操作,即您没有对两个语句之间的数据执行任何操作。

string sqlcom = "INSERT INTO zajsluz(akce,text,castka,rocnik) SELECT akce,text,castka,rocnik FROM zajsluz WHERE akce='"+tentoradek+"' and rocnik='"+klientClass.Rocnik()+"'";

SqlCommand sc = new SqlCommand(sqcom,spojeni);

                spojeni.Open();
                sc.ExecuteNonQuery();
                spojeni.Close();

答案 2 :(得分:0)

另一种选择是使用SQL DataSet / DataTable,它允许您从SQL查询并返回整个表或一组行,然后您可以更新,删除或插入。它在以下MS文章中进行了描述:http://support.microsoft.com/kb/326009/en

答案 3 :(得分:0)

您的问题摘要答案:

StringBuilder query = new Stringbuilder();
query.AppendLine("INSERT INTO zajsluz(akce,text,castka,rocnik) ");
query.AppendLine("(SELECT @akce, text, castka, @rocnik");
query.AppendLine("FROM zajsluz WHERE akce=@Tentoradek");
query.AppendLine("AND rocnik=@rocnik)");

SqlCommand sc2 = new SqlCommand(sqlcom2, spojeni);
sc2.Parameters.AddWithValue("@Tentoradek", tentoradek);
sc2.Parameters.AddWithValue("@akce", zakce.Text);
sc2.Parameters.AddWithValue("@rocnik", klientClass.Rocnik());

spojeni.Open();
sc2.ExecuteNonQuery();
spojeni.Close();