如何使用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。现在我可以将组件拖放到表单上,并设置它们的数据源属性和它们引用的字段。
看一下这个示例。它显示了基本的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