首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlHelper DataAdapter

SqlHelper DataAdapter
EN

Stack Overflow用户
提问于 2016-11-03 09:12:21
回答 2查看 652关注 0票数 1

我使用的是一个SqlHelper类,它具有CRUD操作的通用方法。

代码语言:javascript
复制
  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();
            }
        }
    }

在我的代码中,我将这个方法称为,

代码语言:javascript
复制
 private void BindCustomers()
        {
            DataSet dsCust = new DataSet();           
            SqlHelper.Fill(dsCust, "getCustomers");
            --then I bind this dataset to datagridview
        }

一切都很好。现在我想更新数据库中的数据。但是,我很困惑如何在这里调用DataAdatpaer.Update(dataset)来将数据视图中的更改更新到数据库中。这里有可能吗?或者我需要按照惯例来查找更新的行并在ExecuteNonQuery中调用SqlHelper函数?有什么可以使用dataadapter.update(ds)的方法吗谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-03 09:29:10

您不需要隐藏数据适配器,或者如果出于任何原因,您需要公开类中的方法来将更新推送到服务器。

示例

代码语言:javascript
复制
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);
        }
    }
} 
票数 1
EN

Stack Overflow用户

发布于 2022-11-17 12:39:41

通过在类中实现此方法,您可以执行所有crud操作--选择、更新、删除和插入。您只需要传递连接字符串、过程参数和过程名称。使用此方法,个人将检索DataTable中的数据,如果有人想要数据集,那么只需要在DataTable位置上替换Dataset。

代码语言:javascript
复制
SqlConnection conn = new SqlConnection("Your ConnectionString");
   
public DataTable ExecuteDataTable(string ProcedureName, SqlParameter[] _Param)
{
    try
    {               
        DataTable dataTable = new DataTable();
        SqlCommand cmd = new SqlCommand(ProcedureName, conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Clear();
        if (_Param is not null)
        {
            for (int i = 0; i < _Param.Length; i++)
            {
                if (_Param[i].ParameterName is not null)
                {
                    if (_Param[i].Value is not null)
                    {
                        cmd.Parameters.AddWithValue(_Param[i].ParameterName, _Param[i].Value);
                    }
                    else
                    {
                        cmd.Parameters.AddWithValue(_Param[i].ParameterName, DBNull.Value);
                    }
                }
            }
        }                
        conn.Open();
        SqlDataAdapter DA = new SqlDataAdapter(cmd);
        DA.Fill(dataTable);
        conn.Close();
        return dataTable;
    }
    catch (Exception ex)
    {
        conn.Close();
        throw;

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40397579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档