C# ASP.net为什么不执行这些查询?
在我的代码中,这两个查询似乎都没有运行。调试标签打印为“结束”,因此它在代码块内执行某些操作,只是看起来它不喜欢查询C# ASP.net为什么不执行这些查询?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,在我的代码中,这两个查询似乎都没有运行。调试标签打印为“结束”,因此它在代码块内执行某些操作,只是看起来它不喜欢查询 // Check input is all valid if (Page.IsValid) { debug.Text = "begin"; using (SqlConnection cn = new SqlConnection( ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToS
// Check input is all valid
if (Page.IsValid)
{
debug.Text = "begin";
using (SqlConnection cn = new SqlConnection(
ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()))
{
// Verify that username is unique
using (SqlCommand cmd = new SqlCommand(
"UPDATE tblSiteSettings SET isActive = 0", cn))
{
cn.Open();
cn.Close();
}
using (SqlCommand cmd = new SqlCommand(
"INSERT INTO tblSiteSettings (allowProductRatings, allowComments, " +
"siteName, settingDate, isActive) VALUES (@allowRatings, " +
"@allowcomments, @siteName, getDate(), 1)", cn))
{
cmd.Parameters.Add("@allowRatings", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@allowcomments", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@siteName", SqlDbType.VarChar, 128).Value = "lol";
cn.Open();
cn.Close();
}
debug.Text = "end";
}
}
有几个问题:
cmd.ExecuteScalar();
您也可以重用SqlConnection
,您可以在之后立即使用(SqlConnection cn=new Sql…
语句。当SqlConnection
处于使用块中时,您不必关闭连接,这与当您离开使用块时连接已关闭有关。您的连接缺失
cmd.ExecuteScalar();
您也可以重用SqlConnection
,您可以在之后立即使用(SqlConnection cn=new Sql…
语句。当SqlConnection
处于使用块中时,您不必关闭连接,因为当您离开使用块时,连接已关闭。它不做任何事情的原因是因为您没有实际执行查询。您需要o是:
// Verify that username is unique
using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 0", cn))
{
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
using (SqlCommand cmd = new SqlCommand("INSERT INTO tblSiteSettings (allowProductRatings, allowComments, siteName, settingDate, isActive) VALUES (@allowRatings, @allowcomments, @siteName, getDate(), 1)", cn))
{
cmd.Parameters.Add("@allowRatings", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@allowcomments", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@siteName", SqlDbType.VarChar, 128).Value = "lol";
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
您缺少的是cmd.executeOneQuery();
行。SqlCommand
类公开了各种不同的Execute
方法,最常用的是:
- :执行查询,但不返回查询结果(但会将受影响的行作为其返回值返回)
- :执行查询并返回第一行第一列中的值
- :执行查询并将数据返回给SqlDataReader
它没有做任何事情的原因是因为您没有实际执行查询。您需要做的是:
// Verify that username is unique
using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 0", cn))
{
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
using (SqlCommand cmd = new SqlCommand("INSERT INTO tblSiteSettings (allowProductRatings, allowComments, siteName, settingDate, isActive) VALUES (@allowRatings, @allowcomments, @siteName, getDate(), 1)", cn))
{
cmd.Parameters.Add("@allowRatings", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@allowcomments", SqlDbType.Bit).Value = 1;
cmd.Parameters.Add("@siteName", SqlDbType.VarChar, 128).Value = "lol";
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
您缺少的是cmd.executeOneQuery();
行。SqlCommand
类公开了各种不同的Execute
方法,最常用的是:
- :执行查询,但不返回查询结果(但会将受影响的行作为其返回值返回)
- :执行查询并返回第一行第一列中的值
- :执行查询并将数据返回给SqlDataReader
谢谢,另一个答案中建议的ExecuteOnQuery和ExecuteScalar之间有什么区别?@Tom-我在大约10秒前为你扩展了它=)以及相关的MSDN链接,以保存将答案复制并粘贴到MSDN,这样你就可以在那里获得完整的详细信息=)ExecuteScalar用于从SELECT返回单个值作为对象。ExecuteOnQuery返回一个int来表示受影响的行。所有这些都在链接中进行了解释……谢谢,正如另一个答案中所建议的那样,ExecuteOnQuery和ExecuteScalar之间有什么区别?@Tom-我在大约10秒前为您扩展了它=)与相关的MSDN链接一起保存,使答案成为MSDN的副本和粘贴,以便您可以在那里获得完整的详细信息=)ExecuteScalar用于从选择对象返回单个值。ExecuteOnQuery返回一个int来表示受影响的行。链接中解释了所有内容…两个查询似乎都不打算返回值,因此在本例中,ExecuteOnQuery将是更好的选择,如果没有其他方法可以让将来必须查看或修改代码的人更清楚地了解代码的意图=)+1感谢您的回答,我意识到我现在不需要为每个查询打开连接,此外,即使垃圾收集会处理连接,关闭连接是否更好?我总是喜欢保证我自己做,而不依赖垃圾。@Tom-using(){}
构造在功能上与try/catch/finally相同,它确保Dispose()
被调用到using
块中放置的对象上,它比我或你可靠得多;=)这两个查询似乎都不打算返回值,因此在本例中,ExecuteOnQuery将是更好的选择,如果没有其他方法可以让将来必须检查或修改代码的人更清楚地了解代码的意图=)+1感谢您的回答,我意识到我现在不需要为每个查询打开连接,此外,即使垃圾收集会处理连接,关闭连接是否更好?我总是喜欢保证我自己做,而不依赖垃圾。@Tom-using(){}
构造在功能上与try/catch/finally相同,它确保Dispose()
被调用到using
块中放置的对象上,它比我或你可靠得多;=)