【问题标题】:Getting data from a Datagrid back into SQL Server Database将数据从 Datagrid 取回 SQL Server 数据库
【发布时间】:2012-04-25 19:27:04
【问题描述】:

我提前道歉,因为我知道这对你们大多数人来说是一个非常基本的问题,但我真的很难找到我需要的相关信息,并且想知道是否有人可以向我发送正确的方向。

我有一个 winforms 应用程序和一个 SQLserver 数据库。我知道如何用我的数据库中的数据填充各种控件(包括数据网格)。但是,我正在努力解决的是如何让用户对数据网格中的数据的操作,返回到 sql server 数据库。

我也知道如何从文本框中获取数据并使用 TSQL 将其发布回数据库,但数据网格暗示了我。我知道这与数据绑定有关,但我没有取得太大进展。

这是我目前填充数据网格的方式:

string sqlText = "SELECT * FROM tblCaseTypes;";
string conStr = cConnectionString.BuildConnectionString();
SqlConnection linkToDB = new SqlConnection(conStr);
SqlCommand sqlCom = new SqlCommand(sqlText, linkToDB);
SqlDataAdapter myAdapter = new SqlDataAdapter(sqlCom);
myAdapter.Fill(tsh);
dataTimesheet.DataSource = tsh;

我搜索了各种资源,但没有发现任何非常有用的东西。谁能给我指出一篇好的(初学者)文章的方向,该文章是关于如何在数据网格中获取用户输入数据并从它的来源发回 sqlserver 数据库?

【问题讨论】:

    标签: c# sql-server winforms datagrid


    【解决方案1】:

    您应该在适配器中实现插入/更新/删除命令。

    myAdapter.InsertCommand = new SqlCommand("INSERT INTO yourTable VALUES(@param1, @param2)", conn);
    myAdapter.InsertCommand.Parameters.Add("@param1",...);
    

    只需对更新和删除命令执行相同操作即可。然后,使用适配器填充 DataSet 并将其作为数据网格的数据源。

    DataSet ds = new DataSet();
    myAdapter.Fill(ds);
    dataGrid1.DataSource = ds;
    

    当您想将更改发送到数据库时,您只需调用 myAdapter.Update 方法即可。

    myAdapter.Update(ds);
    

    这里有一篇不错的文章:Add, Edit, and Delete in DataGridView

    【讨论】:

      【解决方案2】:

      我从tsh var 是 DataSet 或 DataTable 的假设开始。
      如果这是真的,那么更新可以通过创建一个新的 SqlDataAdapter 来完成 相同的 SqlCommand,但不使用 Fill 方法,而是使用 Update 方法传递从网格的 DataSource 中提取的 DataTable 或 DataSet。在执行 Update 方法之前,您将 DataAdapter 的 SelectCommand 属性设置为用于检索记录的相同 SqlCommand

      DataTable dt = dataTimesheet.DataSource as DataTable;
      string sqlText = "SELECT * FROM tblCaseTypes;"; 
      string conStr = cConnectionString.BuildConnectionString(); 
      SqlConnection linkToDB = new SqlConnection(conStr); 
      SqlDataAdapter myAdapter = new SqlDataAdapter(); 
      myAdapter.SelectCommand = new SqlCommand(sqlText, linkToDB);
      myAdapter.Update(dt); 
      

      通过这种方式,您将构建更新数据库所需的适当 INSERT、DELETE 和 UPDATE SqlCommand 的负担传递给 SqlDataAdapter。

      但是应该注意,SqlDataAdapter 必须在内部执行 SelectCommand 才能构造 INSERT、UPDATE 和 DELETE SQL 命令。因此,这可能会影响性能。要获得最佳性能,请指定您的 INSERT、DELETE 和 UPDATE 命令,将它们显式分配给 SqlDataAdapter 的 InsertCommand、DeleteCommand 和 UpdateCommand 属性

      给你一些参考:
      Update database from DataGridView
      How To Update a SQL Server Database by Using the SqlDataAdapter Object in Visual C# .NET
      DbDataAdapter.Update Method

      【讨论】:

      【解决方案3】:

      这是一个关于如何从数据网格进行更新的非常基本的示例

      http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datagrid.updatecommand.aspx

      基本上你需要一个

          OnEditCommand="ItemsGrid_Edit"
      

      然后在你的

          Sub ItemsGrid_Update(sender As Object, e As DataGridCommandEventArgs) 
      

      您需要将项目转换回文本框以获取其值的方法

          Dim qtyText As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)
      

      然后您可以在 SQL UPDATE 中使用这些值

      哦,如果要被许多用户使用,您可能应该使用存储过程或 Linq,而不是直接使用 SQL。

      上面的代码也是VB.net,你应该在你的问题中使用标签来说明你使用的是什么语言

      【讨论】:

        猜你喜欢
        • 2017-02-26
        • 2012-06-10
        • 2012-03-13
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 2011-12-13
        • 2017-10-06
        • 1970-01-01
        相关资源
        最近更新 更多