【问题标题】:C# SqlCommand and SqlDataAdapter ExecuteNonQuery for SQL Server INSERT, UPDATE, and DELETE operations? [duplicate]C# SqlCommand 和 SqlDataAdapter ExecuteNonQuery 用于 SQL Server INSERT、UPDATE 和 DELETE 操作? [复制]
【发布时间】:2013-12-28 17:14:14
【问题描述】:

对于 SQL Server INSERTUPDATEDELETE 操作,请告知在 SqlCommandSqlDataAdapter 之间进行选择。

让我们考虑一下 SQL Server 的以下代码 sn-p:

public int Execute(SqlCommand commandSql) 

public int Insert(SqlCommand commandSql)

考虑到SqlCommandExecute 方法)的明显优势是它可以用于所有 INSERT、UPDATE 和 DELETE 操作,而SqlDataAdapter(插入、更新、删除方法)的优势是断开连接的架构,使用SqlCommandExecuteNonQuery相对于SqlDataAdapterExecuteNonQuery有什么优缺点?

企业级 Web 应用程序的注意事项?请专家澄清一下。

请注意,这个问题与 LINQ 或实体框架无关,这是关于 SqlCommand ExecuteNonQuerySqlDataAdapter ExecuteNonQuery 的对比?

重要问题SqlCommand ExecuteNonQuery 使用连接架构还是非连接架构?

//Insert
private bool Insert(string firstName, string lastName, string synonym)
{
    bool isInserted = false;
    try
    {
        int rowsAffected = 0;
        StringBuilder insertQuery = new StringBuilder();
        insertQuery.Append("INSERT INTO Customer ");
        insertQuery.Append("(");
        insertQuery.Append("FirstName, ");
        insertQuery.Append("LastName, ");
        insertQuery.Append("Synonym ");
        insertQuery.Append(") ");
        insertQuery.Append("VALUES ");
        insertQuery.Append("(");
        insertQuery.Append("@FirstName, ");
        insertQuery.Append("@LastName, ");
        insertQuery.Append("@Synonym ");
        insertQuery.Append(");");
        using (SqlCommand commandSql = new SqlCommand(insertQuery.ToString()))
        {
            commandSql.Parameters.AddWithValue("@FirstName", firstName);
            commandSql.Parameters.AddWithValue("@LastName", lastName);
            commandSql.Parameters.AddWithValue("@Synonym", synonym);
            DataAccessLayer dal = new DataAccessLayer();

            rowsAffected = dal.Execute(commandSql); // SqlCommand ????
        rowsAffected = dal.Insert(commandSql); // SqlDataAdapter ???

        }
        if (rowsAffected > 0)
        {
            isInserted = true;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    return isInserted;
}
//UPDATE
private bool Update(int custId, string firstName, string lastName, string synonym)
{
    bool isUpdated = false;
    try
    {
        int rowsAffected = 0;
        StringBuilder updateQuery = new StringBuilder();
        updateQuery.Append("UPDATE Customer ");
        updateQuery.Append("SET ");
        updateQuery.Append("FirstName = @FirstName, ");
        updateQuery.Append("LastName = @LastName, ");
        updateQuery.Append("Synonym = @Synonym ");
        updateQuery.Append("WHERE ");
        updateQuery.Append("CustomerId = @CustomerId;");
        using (SqlCommand commandSql = new SqlCommand(updateQuery.ToString()))
        {
            commandSql.Parameters.AddWithValue("@CustomerId", custId);
            commandSql.Parameters.AddWithValue("@FirstName", firstName);
            commandSql.Parameters.AddWithValue("@LastName", lastName);
            commandSql.Parameters.AddWithValue("@Synonym", synonym);
            DataAccessLayer dal = new DataAccessLayer();
            rowsAffected = dal.Execute(commandSql); // SqlCommand ????
        rowsAffected = dal.Update(commandSql); // SqlDataAdapter ???
        }
        if (rowsAffected > 0)
        {
            isUpdated = true;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    return isUpdated;
}
//DELETE
private bool Delete(int custId)
{
    bool isDeleted = false;
    try
    {
        int rowsAffected = 0;
        StringBuilder deleteQuery = new StringBuilder();
        deleteQuery.Append("DELETE FROM Customer ");
        deleteQuery.Append("WHERE ");
        deleteQuery.Append("CustomerId = @CustomerId;");
        using (SqlCommand commandSql = new SqlCommand(deleteQuery.ToString()))
        {
            commandSql.Parameters.AddWithValue("@CustomerId", custId);
            DataAccessLayer dal = new DataAccessLayer();
            rowsAffected = dal.Delete(commandSql);
        rowsAffected = dal.Execute(commandSql); // SqlCommand ????
        rowsAffected = dal.Delete(commandSql); // SqlDataAdapter ???
        }
        if (rowsAffected > 0)
        {
            isDeleted = true;
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
    return isDeleted;
}

// SqlCommand
public int Execute(SqlCommand commandSql)
{
    int rowsAffected = 0;
    using (SqlConnection connectionSql = new SqlConnection("ConnectionString"))
    {
        commandSql.Connection = connectionSql;
        commandSql.Connection.Open();
        rowsAffected = commandSql.ExecuteNonQuery();           
    }
    return rowsAffected;
}

// SqlDataAdapter
public int Insert(SqlCommand commandSql)
{
    int rowsAffected = 0;
    using (SqlConnection connectionSql = new SqlConnection("ConnectionString"))
    {
        using (SqlDataAdapter dataAdapterSql = new SqlDataAdapter())
        {
            dataAdapterSql.InsertCommand = commandSql;
            dataAdapterSql.InsertCommand.Connection = connectionSql;
            dataAdapterSql.InsertCommand.Connection.Open();
            rowsAffected = dataAdapterSql.InsertCommand.ExecuteNonQuery();
        }            
    }
    return rowsAffected;
}
// SqlDataAdapter
public int Update(SqlCommand commandSql)
{
    int rowsAffected = 0;
    using (SqlConnection connectionSql = new SqlConnection("ConnectionString"))
    {       
        using (SqlDataAdapter dataAdapterSql = new SqlDataAdapter())
        {
            dataAdapterSql.UpdateCommand = commandSql;
            dataAdapterSql.UpdateCommand.Connection = connectionSql;
            dataAdapterSql.UpdateCommand.Connection.Open();
            rowsAffected = dataAdapterSql.UpdateCommand.ExecuteNonQuery();
        }            
    }
    return rowsAffected;
}
// SqlDataAdapter
public int Delete(SqlCommand commandSql)
{
    int rowsAffected = 0;
    using (SqlConnection connectionSql = new SqlConnection("ConnectionString"))
    {
        using (SqlDataAdapter dataAdapterSql = new SqlDataAdapter())
        {
            dataAdapterSql.DeleteCommand = commandSql;
            dataAdapterSql.DeleteCommand.Connection = connectionSql;
            dataAdapterSql.DeleteCommand.Connection.Open();
            rowsAffected = dataAdapterSql.DeleteCommand.ExecuteNonQuery();
        }
    }
    return rowsAffected;
}

请帮忙。

谢谢

【问题讨论】:

标签: c# sql-server


【解决方案1】:

SQLDataAdapter 是用于Dataset 类的特殊情况。如果您在示例中使用纯 SQL 输入,如果未使用特定数据集,则最好使用 SQLCommand 来实现此目的。如果您打算将数据集之类的东西用于企业用途,则值得考虑更新的实体框架,因为它提供了类型而不是普通数据集。

【讨论】:

  • 重要问题SqlCommand ExecuteNonQuery 使用连接或断开的架构?
  • 这通常被认为是“连接”架构,因为它需要连接才能修改数据。数据集和实体框架被认为是“断开连接”的架构,因为它们可以修改内存中的数据,然后同步回数据库。
猜你喜欢
  • 2011-12-02
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
相关资源
最近更新 更多