2011-05-12 34 views
2

我正在使用ASP.Net將數據更新到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(); 
} 

請發表評論,對什麼是最佳實踐的建議。

謝謝你提前。

回答

3

您的第二種方法更好,但如果您使用Parameterized query for better prevention from a SQL Injection Attack會更好。

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(); 
} 
} 
+1

不錯,但是還需要一個'使用'在'SqlCommand'周圍。 –

+0

@John,謝謝你的糾正。 –

+1

exec dbo.XX_Insert_Announcement看起來像一個存儲過程調用,所以我會將CommandType.Text更改爲CommandType.StoredProcedure –

相關問題