如何使用windows窗体在数据库上执行基本的CRUD

本文关键字:执行 CRUD 数据库 何使用 windows 窗体 | 更新日期: 2023-09-27 18:06:58

我在后台进程和网页中广泛使用。net框架,但我从来没有需要使用Windows窗体。我唯一使用Windows表单类型技术的经验是使用Delphi 6&7。

我已经搜索了教程,因为它们似乎对我正在寻找的东西太基本了。或者它似乎不适合我正在尝试做的事情。

我想有一个网格显示(为此我一直在使用DataGridView)的形式(我已经设法做到了),以便用户可以查看,过滤和搜索数据。其他的事情,比如分页,也会涉及到,但我想我可以自己解决这个问题。

我遇到的所有例子都使用DataGridView进行编辑,添加和删除。我对用户使用网格来处理所有事情的想法不太满意。这似乎令人困惑,而且很容易出错。

我想有按钮来添加,编辑和删除各种类型的数据。例如,如果我有一个表单来管理客户,我希望能够选择要编辑的行并单击按钮。这应该会打开一个新的窗口窗体,所有的数据都预装在文本框、单选按钮、复选框和下拉框等中。

如果他们点击添加,他们将进入与编辑相同的屏幕,除了那里的所有信息都是空白的。如果他们选择一行并单击delete,那么它将删除该客户并将其从DataGridView中删除。

使用一些控件和数据绑定选项,我尝试过它似乎从表中获取所有行。我怎样才能从数据库中得到我感兴趣的行。我不确定这里的最佳实践是什么。

我现在正受信息过载的困扰,如果有人能给我指出正确的方向,我会很感激的。

编辑:

我应该提到,从我的Delphi天,我希望能够设置像查询或SqlCommand(在gui上拖放),并设置其SQL属性,也许参数化SQL一点点。在窗体上拖放数据源。将数据源指向SqlQuery/SqlCommand并单击该命令上的activate。现在我可以将组件拖放到表单上,并设置它们的数据源属性和它们引用的字段。

如何使用windows窗体在数据库上执行基本的CRUD

看一下这个示例。它显示了基本的ADO。. NET绑定到WinForm控件(不只是DataGridView)

你可以用很多方法。有很多框架可以提供帮助。实体框架,nhibernate .

,但在较低的级别上,您可以使用数据库相关对象。SqlConnection, SqlCommand, DataReader。下面是与sql server相关的加载行的示例。

private IList<IPosition> PositionsLoad(SqlConnection connection, PositionsRequest request)
{
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = connection;
    cmd.CommandText = "select * from mytable WHERE x ";
    cmd.CommandType = CommandType.Text;
    //Get the reader
    SqlDataReader reader = cmd.ExecuteReader;
    IList<IPosition> ret = new List<IPosition>();
    if (reader.HasRows()) {
        //Create our converter to convert DataReader into a business object/s
        DataReaderToPosition readerConvert = new DataReaderToPosition();
        //loop rows
        while (reader.Read) {
            IPosition pos = readerConvert.DataReaderToBusinessObject(reader);
            ret.Add(pos);
        }
    }
    reader.Close();
    return ret;
}

使用数据读取器:

Public Overrides Function DataReaderToBusinessObject(ByVal reader As System.Data.IDataReader) As IPosition
    Dim res As IPosition = New Position
    res.ItemDate = reader.GetDateTime(reader.GetOrdinal("Date"))
    res.Strategy = reader.GetString(reader.GetOrdinal("Strategy"))
    res.SubStrategy = reader.GetString(reader.GetOrdinal("SubStrategy"))
    res.BrokerPrime = reader.GetString(reader.GetOrdinal("BrokerPrime"))
    res.BrokerExecuting = reader.GetString(reader.GetOrdinal("BrokerExecuting"))
    res.AccountName = reader.GetString(reader.GetOrdinal("AccountName"))
    res.ExpectedLoss = reader.GetDouble(reader.GetOrdinal("Expected_Loss"))
    res.RiskNotional = reader.GetDouble(reader.GetOrdinal("Risk_Notional"))
    res.ModelDelta = reader.GetDouble(reader.GetOrdinal("Model_Delta"))
    res.ExpectedTrancheLoss = reader.GetDouble(reader.GetOrdinal("Expected_Tranche_Loss"))
    res.BaseCorrelation = reader.GetDouble(reader.GetOrdinal("Base_Correlation"))
    res.LossOnSingleNameDefault = reader.GetDouble(reader.GetOrdinal("Loss_on_Single_Name_Default"))
    res.RiskCapitalAllocation = reader.GetDouble(reader.GetOrdinal("Risk_Capital_Allocation"))
    res.MarginFundingAllocation = reader.GetDouble(reader.GetOrdinal("Margin_Funding_Allocation"))
    res.DataSource = reader.GetString(reader.GetOrdinal("DataSource"))
    Return res
End Function