我正在创建一个项目,需要在一个SQL连接中运行2-3个SQL命令。下面是我编写的代码:
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\project.mdf;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("select * from " + mytags.Text + " ", con);
SqlDataReader rd = cmd.ExecuteReader();
if (rd.Read())
{
con.Close();
con.Open();
SqlCommand cmd1 = new SqlCommand("insert into " + mytags.Text + " values ('fname.lname@gmail.com','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','"+mytags.Text+"')", con);
cmd1.ExecuteNonQuery();
label.Visible = true;
label.Text = "Date read and inserted";
}
else
{
con.Close();
con.Open();
SqlCommand cmd2 = new SqlCommand("create table " + mytags.Text + " ( session VARCHAR(MAX) , Price int , Description VARCHAR(MAX), Date VARCHAR(20),tag VARCHAR(10))", con);
cmd2.ExecuteNonQuery();
con.Close();
con.Open();
SqlCommand cmd3 = new SqlCommand("insert into " + mytags.Text + " values ('" + Session + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + mytags.Text + "')", con);
cmd3.ExecuteNonQuery();
label.Visible = true;
label.Text = "tabel created";
con.Close();
}
我已经尝试删 debugging 误,我得到的连接是不会到其他条件。请审查代码,并建议是否有任何错误或任何其他解决方案。
9条答案
按热度按时间nhjlsmyf1#
只需更改
SqlCommand.CommandText
,而不是每次都创建一个新的SqlCommand
,无需关闭和重新打开连接。oymdgrw72#
下面的方法应该可以起作用。保持一个连接一直打开,只需要创建新的命令并执行它们。
093gszye3#
只需在连接字符串中启用此属性:
sqb.MultipleActiveResultSets = true;
此属性允许多个数据读取器使用一个打开的连接。
68de4m5k4#
我没有测试过,但主要的想法是什么:请在每个查询中使用分号。
**更新:**您也可以关注Is it possible to have multiple SQL instructions in a ADO.NET Command.CommandText property?
0dxa2lsx5#
顺便说一句,这很可能是通过SQL注入攻击的,这将是值得阅读的,并相应地调整您的查询。
也许可以考虑为此创建一个存储过程,并使用类似sp_executesql的东西,当需要动态sql时(即未知表名等),它可以提供一些保护。
hs1rzwqc6#
没有人提到过这一点,但是您也可以使用a分隔您的命令;分号:
41zrol4v7#
多个非查询示例,如果有人感兴趣。
ryoqjall8#
在这里你可以找到Postgre的例子,这段代码在一个SQL连接中运行多个SQL命令(更新2列
vlurs2pr9#
对我很有效。