0

伙计们,这是我想出的,我不知道是什么问题不允许我更新数据库中的表

伙计们,我需要你的帮助我需要使用 c# 通过数据更新我的数据库grid,但我所能做的就是我能够看到我直接放入的 sql server 中的值。

string sConnectionString = "Data Source=localhost;Initial Catalog=ScratchCardSystem2;Integrated Security=True;pooling=true";
SqlConnection objConn = new SqlConnection(sConnectionString);
objConn.Open();
string query = "SELECT * FROM store_adj_note_detail_1";
SqlDataAdapter dAdapter = new SqlDataAdapter(query,objConn);
//dAdapter.SelectCommand= new SqlCommand(query, objConn);
SqlCommandBuilder cBuilder = new SqlCommandBuilder(dAdapter);
DataTable dTable = new DataTable();
//fill the DataTable
dAdapter.Fill(dTable);
dataGridView1.DataSource = dTable;

dAdapter.Update(dTable);
4

3 回答 3

0
 OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dAdapter);

不见了。MSDN 说:

//Without the OleDbCommandBuilder this line would fail.
dAdapter.Update(dTable);
于 2013-01-26T16:59:08.180 回答
0

您缺少将 datagridview 绑定到数据表的内容。这里的诀窍是您需要一个 BindingSource。

在“//填充数据表”行之前添加以下内容

BindingSource bindSrc = new BindingSource();

然后更改您的 datagridview 的数据源并将源添加到您的绑定源,如下所示:

dataGridView1.DataSource = bindSrc;  
bindSrc.DataSource = dTable;

编辑:我忘了提一件小事:要更新,您现在必须参考作为 bindingSrouce 来源的数据表,这就是我的做法:

dAdapter.Update((DataTable)bindSrc.DataSource);

仅使用常规更新(dTable)可能有可能,但如果没有,这可能会修复它

于 2013-01-26T17:02:15.280 回答
0

所以这基本上是我用于我自己的表单的。在建立连接时,连接打开,它用来自 store_adj_note_detail_1 的数据填充了我的 datagridview1。
请注意,我从未声明我的 bindingSource ......我也不知道原因,但我尝试与其他人(全局)和本地声明它,两者都使代码中断:/

BindingSource 的声明发生在表单的设计视图中 - 只需将其从表单顶部的工具箱中拖动,它就会显示为 FileDialogs 和 Menustrips 之类的图标。我个人只更改了 Name 属性,并没有添加任何事件。

它应该为您提供打开连接所需的一切概览,使用 bindingsource 链接您的 datagridview 和您的 dataTable,并更新您的数据库。

我通过编辑用于访问数据库的自己的代码获得了此代码,但 SQL 数据库的工作方式似乎完全相同,只是使用不同的实体(sqlDataAdapter 等而不是 OleDb ...)。

希望这对你有帮助!

public partial class FrmDatabaseConnection : Form
{
    // Connection, Adapter, DataTable, CommandBuilder, Bindingsource and command
    private SqlDataAdapter adap;
    private DataTable dataTable;
    private SqlCommandBuilder commandBuilder;
    private string sqlCommand = "SELECT * FROM store_adj_note_detail_1";
    private SqlConnection conDB = new SqlConnection();

    //To open connection and fill datagridview1
    private void establishConnection()
    {
        try
                {
                    conDB.ConnectionString = "Data Source=localhost;Initial Catalog=ScratchCardSystem2;Integrated Security=True;pooling=true";
                    conDB.Open();

                    // Set adapter, commandbuilder, datatable and bindingsource
                    adap = new SqlDataAdapter(sqlCommand, conDB.ConnectionString);
                    commandBuilder = new SqlCommandBuilder(adap);
                    bindSrc = new BindingSource();
                    dataTable = new DataTable();

                    // Fill it!
                    adap.Fill(dataTable);
                    dataGridView1.DataSource = bindSrc;
                    bindSrc.DataSource = dataTable;


                }
                catch (Exception ex)
                {
                    MessageBox.Show("Unable to Open database, " + ex.Message,);
                    conDB.Close();
                }

    }

    private bool saveToDatabase()
    {
        try
                {
                    adap.Update((DataTable)bindSrc.DataSource);
            }
        catch (Exception ex)
                {
                    MessageBox.Show("Unable to Update database, " + ex.Message);
                    return false;
                }

    }


}
于 2013-01-26T23:30:22.093 回答