【问题标题】:c# textbox to databasec#文本框到数据库
【发布时间】:2013-02-21 14:59:25
【问题描述】:

我在 C# WinForm 上有一个 dataGridView、textBoxFirstName、buttonSelect 和 buttonUpdate。我的问题末尾有代码。

当我单击 buttonSelect 按钮时,选择结果到 dataGridView 和 textBoxFirstName 没有问题。当我从 dataGridView 中选择不同的记录时,textBoxFirstName 也会自动更新。

当我从 dataGridView 更改“FirstName”字段并单击 buttonUpdate 时,FirstName 字段被保存到数据库中没有问题。

但是当我从 textBoxFirstName 更改“FirstName”时,当我单击 buttonUpdate 时,数据不会保存到数据库中。

当从 textBoxFirstName 进行更改并单击 buttonUpdate 时,如何将 FirstName 字段保存到数据库中?

谢谢。

public partial class Form1 : Form
{

    private const string connectionString = "Server=localhost;Database=AdventureWorks2008R2;Trusted_Connection=True";
    private SqlConnection con;
    private SqlDataAdapter dataAdapter;

    public Form1()
    {
        InitializeComponent();
        con = new SqlConnection(connectionString);
    }

    private void FillGrid(string sqlCommand)
    {
        dataAdapter = new SqlDataAdapter(sqlCommand, con);
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

        DataTable dataTable = new DataTable();
        dataAdapter.Fill(dataTable);

        dataGridView.DataSource = dataTable;
        textBoxFirstName.DataBindings.Clear();
        textBoxFirstName.DataBindings.Add("Text", dataTable, "FirstName");
    }

    private void buttonSelect_Click(object sender, EventArgs e)
    {
        FillGrid("SELECT TOP 100 * FROM Person.Person");
    }

    private void buttonUpdate_Click(object sender, EventArgs e)
    {
        dataAdapter.Update((DataTable)dataGridView.DataSource);
    }
}

【问题讨论】:

  • 使用参数化查询来避免 SQL 注入。 xkcd.com/327
  • @Ravi 但他没有在查询中使用任何参数
  • @AndreyGordeev 他使用内联 SELECT TOP 100 * FROM Person.Person。在 sql 中使用 * 成本更高
  • 谢谢。此代码是简要说明问题的示例。对于此示例,安全性和性能并不那么重要。
  • @jack85,检查您在文本框中所做的更改是否影响dataTable

标签: c# winforms


【解决方案1】:

这是因为在 buttonUpdate_Click 内部,您正在使用网格的数据源更新 dataAdapter。因此,网格中的任何内容都会存储在数据库中,但是,文本框中的文本不会。您还需要使用textBoxFirstName 的数据源更新数据适配器。希望对您有所帮助。

【讨论】:

  • Grid 的数据源是dataTabletextBoxFirstName 也绑定到 dataTable
  • 我尝试了所有建议,但不幸的是我仍然无法解决问题。
【解决方案2】:

当你点击按钮更新时有人告诉你没有更新文本框的数据,你只是在更新 gridviews 数据..现在试试这个。

private void buttonUpdate_Click(object sender, EventArgs e)
{
    dataAdapter.Update((DataTable)dataGridView.DataSource);
    textBoxFirstName.DataBindings.Add("Text", dataTable, "FirstName");
}

【讨论】:

  • dataGridView 和 textBoxFirstName 使用相同的数据源(dataTable):dataGridView.DataSource = dataTable; textBoxFirstName.DataBindings.Add("Text", dataTable, "FirstName"); 下面的代码不应该将 dataGridView 和 textBoxFirstName 都保存到数据库中,因为它们使用的是相同的数据源吗? dataAdapter.Update((DataTable)dataGridView.DataSource);
  • @jack85 是的,但有问题的是,gridview 和 textbox 本身都已分别绑定...
  • 不幸的是上面的例子和下面的例子都没有解决问题。我不明白我在哪里犯了错误:\ private void buttonUpdate_Click(object sender, EventArgs e) { dataAdapter.Update((DataTable)textBoxFirstName.DataBindings[0].DataSource); dataAdapter.Update((DataTable)dataGridView.DataSource); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多