从C#ASP.NET将数据插入SQL DB

时间:2017-10-31 14:18:14

标签: c# asp.net sql-server

我正在尝试将值插入到我的SQL数据库中,该查询适用于SQL端,但是当它从C#ASP.NET实现它时,它不会向SQL数据库中插入任何内容。代码如下:

public partial class About : Page
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

    protected void Page_Load(object sender, EventArgs e)
    {
        con.Open();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        SqlCommand cmd = new SqlCommand("insert into sanctuary(SName) values('test')", con);
        cmd = new SqlCommand("insert into species(Name) values('test1')", con);
        cmd = new SqlCommand("insert into breed(SpeciesID, BreedName, FoodCost, HousingCost)  SELECT SpeciesID, ('breed'), ('12'), ('21') FROM species", con);

        cmd.ExecuteNonQuery();
        con.Close();
    }
}

}

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果要同时执行三个命令,请将三个命令的sql合并为一个字符串,用分号分隔它们(参见Batch of Sql Commands

   string cmdText = @"insert into sanctuary(SName) values('test');
                      insert into species(Name) values('test1');
                      insert into breed(SpeciesID, BreedName, FoodCost, HousingCost)  
                      SELECT SpeciesID, ('breed'), ('12'), ('21') FROM species";
   SqlCommand cmd = new SqlCommand(cmdText, con);
   cmd.ExecuteNonQuery();

代码中的第一个问题是您需要执行每个命令,而不仅仅是最后一个命令。最后,如果您看不到最后一个命令的插入,可能是因为您的表 species 是空的,因此最终命令没有任何内容可以插入。

最后请注意,Zohar Peled强调的关于不保留全局连接对象的要点非常重要,请遵循建议。

答案 1 :(得分:1)

您只执行最后一个命令,因此species中没有任何内容。由于species中没有任何内容,select不会返回任何结果,因此不会将任何内容插入breed

此外,在页面级别保留SqlConnection对象不是一个好主意。 SQL连接应该在执行查询之前打开,并在紧接着之后处理。

更好的代码看起来像这样:

using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    using(var com = new SqlCommand("insert into sanctuary(SName) values('test');insert into species(Name) values('test1');insert into breed(SpeciesID, BreedName, FoodCost, HousingCost)  SELECT SpeciesID, ('breed'), ('12'), ('21') FROM species", con)
    {
         con.Open();
         com.ExecuteNonQuery();
    }
}

当然,你可以单独执行每个SQL语句(尽管在这种情况下它不是最好的行动方案,因为它意味着3次往返数据库而不只是一次):

using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    using(var com = new SqlCommand("insert into sanctuary(SName) values('test');", con)
    {
         con.Open();
         com.ExecuteNonQuery();
         com.CommandText = "insert into species(Name) values('test1');";
         com.ExecuteNonQuery();
         com.CommandText = "insert into breed(SpeciesID, BreedName, FoodCost, HousingCost)  SELECT SpeciesID, ('breed'), ('12'), ('21') FROM species;";
         com.ExecuteNonQuery();
    }
}