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

从C#ASP.NET将数据插入SQL数据库,c#,asp.net,sql-server,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

我试图在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();
    }
}
}


非常感谢您的帮助

如果要同时执行三个命令,可以将三个命令的sql合并为一个字符串,并用分号分隔(请参阅)

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


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

如果要同时执行三个命令,请将三个命令的sql合并为一个字符串,并用分号分隔(请参阅)

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


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

您只执行最后一个命令,因此
中没有任何内容。由于
品种
中没有任何内容,因此
选择
不会返回任何结果,因此不会在
品种
中插入任何内容

另外,在页面级别保留
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语句(尽管在本例中,这不是最佳的操作过程,因为它意味着对数据库的三次往返而不是一次):


您只执行最后一个命令,因此
中没有任何内容。由于
品种
中没有任何内容,因此
选择
不会返回任何结果,因此不会在
品种
中插入任何内容

另外,在页面级别保留
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语句(尽管在本例中,这不是最佳的操作过程,因为它意味着对数据库的三次往返而不是一次):



我希望至少能运行最后一个命令。你有没有收到任何错误消息?你为什么把它标记为MySQL?您使用的是SqlConnection和SqlCommand类,它们用于MS SQL,与MySQL无关。您只执行最后一个命令,因此
中没有任何内容。由于
物种
中没有任何内容,因此select不会返回任何结果,因此不会将任何内容插入到
品种
@Steve中,实际上第一个命令正在运行,其余命令都没有。但是非常感谢你在下面的回答,帮助很大!!!我已经花了四天时间研究这个问题。我希望至少能运行最后一个命令。你有没有收到任何错误消息?你为什么把它标记为MySQL?您使用的是SqlConnection和SqlCommand类,它们用于MS SQL,与MySQL无关。您只执行最后一个命令,因此
中没有任何内容。由于
物种
中没有任何内容,因此select不会返回任何结果,因此不会将任何内容插入到
品种
@Steve中,实际上第一个命令正在运行,其余命令都没有。但是非常感谢你在下面的回答,帮助很大!!!我花了四天的时间研究这个问题。单独的命令是最好的,如果出现错误,它可以被追踪。将语句组合到1个SQL命令中是一种不好的做法。@Rob这通常是正确的,但我不确定它在这里是否正确。是的,这是一种不好的做法,就像说GOTO是坏的,但如果它只是偶尔出现一次,那么就可以了-错:不,坏:是的。增长/添加多命令语句的诱惑存在,在未来的项目中这样做的诱惑存在,使之成为习惯的诱惑存在,然后下一个调试代码的人会怎样。至于“往返时间”——与实际数据库执行时间相比可以忽略不计。@Rob您确实意识到很多数据库活动涉及的不仅仅是一条语句,对吗?您是否也反对使用存储过程?如果不是,你反对使用多语句存储过程吗?@Rob,我可以说。我甚至同意你的第一句话。这就是为什么我在回答中显示了这两个选项。然而,我相信知道这些选项是很好的,并且将简单的、几乎“完全证明”的语句连接到一个命令对象中不会让我觉得在调试中有什么可怕的。我同意最好从最佳实践开始,但知道还有其他替代方案(有时可能有用)也很好。单独的命令是最好的,如果发生错误,可以跟踪。将语句组合到1个SQL命令中是一种不好的做法。@Rob这通常是正确的,但我不确定它在这里是否正确。是的,这是一种不好的做法,就像说GOTO是坏的,但如果它只是偶尔出现一次,那么就可以了-错:不,坏:是的。增长/添加多命令语句的诱惑存在,在未来的项目中这样做的诱惑存在,使之成为习惯的诱惑存在,然后下一个调试代码的人会怎样。至于“往返时间”——与实际数据库执行时间相比可以忽略不计。@Rob您确实意识到很多数据库活动涉及的不仅仅是一条语句,对吗?你也反对使用sto吗
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();
    }
}