我正在尝试将值插入到我的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();
}
}
}
非常感谢您的帮助!
答案 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();
}
}