将数据从Datagrid返回到SQL Server数据库

时间:2012-04-13 12:20:50

标签: c# sql-server winforms datagrid

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

我有一个winforms应用程序和一个SQLserver数据库。我知道如何用我的数据库中的数据来打包各种控件(包括datagrid)。但是,我正在努力的是如何让用户操纵datagrid中的数据,返回到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数据库,从哪里来?

3 个答案:

答案 0 :(得分:2)

我从假设tsh var是DataSet或DataTable开始 如果这是真的,则可以使用创建新的SqlDataAdapter来完成更新 相同的SqlCommand但是,您使用Update方法来传递从网格的DataSource中提取的DataTable或DataSet,而不是使用Fill方法。在执行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); 

通过这种方式,您可以向SqlDataAdapter传递构建更新数据库所需的相应INSERT,DELETE和UPDATE SqlCommand的负担。

但是应该注意,在内部,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

答案 1 :(得分:1)

您应该在适配器中实现insert / update / delete命令。

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

对Update和Delete命令执行相同操作。然后,使用适配器填充DataSet,并将其作为数据网格的数据源。

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

如果要将更改发送到数据库,可以调用myAdapter.Update方法。

myAdapter.Update(ds);

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

答案 2 :(得分:0)

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

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,您应该在问题中使用标签来说明您正在使用的语言