c# - 在 ASP.Net 中将数据更新到 SQL Server 的最佳实践是什么

标签 c# .net asp.net sql sql-server

我正在 ASP.Net 中将数据更新到 SQL Server。

我只有一个cs文件,没有aspx/ascx文件,所以我不会在这里使用SqlDataSource控件。

下面是我的代码:

string connStr = ConfigurationManager.ConnectionStrings["XXConnString"].ConnectionString;

SqlConnection conn = new SqlConnection(connStr);

if (conn.State == ConnectionState.Closed)
{
    conn.Open();
}

string query = @"exec dbo.XX_Insert_Announcement @AnnID ='" + id +
                                            "', @AnnTitle ='" + title +
                                            "', @AnnSubmitDateTime ='" + startDate + 
                                            "', @AnnProcessDateTime ='" + endDate + "'";

SqlCommand cmd = new SqlCommand(query, conn);
cmd.ExecuteNonQuery();
conn.Close();

if (conn.State == ConnectionState.Open)
{
    conn.Close();
}

我认为我的代码对于错误处理来说不够好,如果查询执行失败,不会抛出任何错误,并且代码会继续运行而不更新到数据库。

也许使用Using语句可以解决这个问题,代码如下:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    command.Connection.Open();
    command.ExecuteNonQuery();
}

请就最佳实践发表评论并提出建议。

提前谢谢您。

最佳答案

您的第二种方法更好,但如果您使用参数化查询来更好地防止 SQL 注入(inject)攻击,效果会更好。

using (SqlConnection connection = new SqlConnection(connectionString))
{
 using(SqlCommand command = connection.GetCommand(queryString, CommandType.Text))
 {
  command.Parameters.Add(new SqlParameter("AnnID", id));
  command.Parameters.Add(new SqlParameter("AnnTitle", title));
  ............
  ..............
  command.Connection.Open();
  command.ExecuteNonQuery();
 }
}

关于c# - 在 ASP.Net 中将数据更新到 SQL Server 的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972834/

相关文章:

c# - 如何在 ASP.NET MVC 中选择数据访问方法?

特定目录的 ASP.NET HTTPS

c# - 反序列化返回空对象,使用Filestream和Binaryformatter

c# - 我有一个 C# 开关,我需要在每个案例返回之前调用一个方法。有什么办法可以简化这个吗?

.net - 在 NETFX 4.0 工具之外运行 sn.exe 出现问题

c# - 从 Web 浏览器控件打开证书信息

.net - 隐藏 Infragistics Winform UltraCombo 上的标题

asp.net - 如何不使用 ASP.Net 成员(member)安全问题和答案进行自定义密码恢复?

c# - 无法将类型 '...' 隐式转换为 'System.Collections.Generic.IList<...>' 。存在显式转换(您是否缺少转换?)

c# 我可以使用 streamwriter 创建一个动态文件名吗?