2016-11-03 2 views
1

Я использую класс SqlHelper, который имеет общие методы для операций CRUD.SqlHelper DataAdapter

public static void Fill(DataSet dataSet, String procedureName) 
    { 
     SqlConnection oConnection = new SqlConnection(DBInterface.ConnectionString); 
     SqlCommand oCommand = new SqlCommand(procedureName, oConnection); 
     oCommand.CommandType = CommandType.StoredProcedure; 

     SqlDataAdapter oAdapter = new SqlDataAdapter(); 

     oAdapter.SelectCommand = oCommand; 
     oConnection.Open(); 
     using (SqlTransaction oTransaction = oConnection.BeginTransaction()) 
     { 
      try 
      { 
       oAdapter.SelectCommand.Transaction = oTransaction; 
       oAdapter.Fill(dataSet); 
       oTransaction.Commit(); 
      } 
      catch 
      { 
       oTransaction.Rollback(); 
       throw; 
      } 
      finally 
      { 
       if (oConnection.State == ConnectionState.Open) 
        oConnection.Close(); 
       oConnection.Dispose(); 
       oAdapter.Dispose(); 
      } 
     } 
    } 

Сейчас в моем коде, я называю этот метод как,

private void BindCustomers() 
     { 
      DataSet dsCust = new DataSet();   
      SqlHelper.Fill(dsCust, "getCustomers"); 
      --then I bind this dataset to datagridview 
     } 

Это все работает отлично. Теперь я хочу обновить данные в базе данных. Но я смущен, как я могу назвать DataAdatpaer.Update (dataset) здесь, чтобы обновить изменения, внесенные в datagridview в базу данных. Возможно ли это здесь? Или мне нужно сделать это условно, чтобы найти обновленную строку и вызвать функцию ExecuteNonQuery в SqlHelper? Есть ли что-нибудь, что можно сделать для использования dataadapter.update (ds) Спасибо

+0

Единый оператор выбора, кажется, не нуждается в операции. –

ответ

1

Вам не нужно скрывать адаптер данных, или если по какой-либо причине вы сделали это, вам нужно выставить метод в своем классе push обновления для сервера.

Пример

Public class SqlHelper 
{ 
    string commandText; 
    string connectionString; 
    public SqlHelper(string command, string connection) 
    { 
     commandText = command; 
     connectionString = connection; 
    } 
    public DataTable Select() 
    { 
     var table = new DataTable(); 
     using (var adapter = new SqlDataAdapter(this.commandText, this.connectionString)) 
      adapter.Fill(table) 
     return table; 
    } 
    public void Update(DataTable table) 
    { 
     using (var adapter = new SqlDataAdapter(this.commandText, this.connectionString)) 
     { 
      var builder = new SqlCommandBuilder(adapter); 
      adapter.Update(table); 
     } 
    } 
}