如何通过数据网格制作数据库
本文关键字:数据库 网格 数据网 何通过 数据 | 更新日期: 2023-09-27 17:56:03
>伙计们,这是我想出的,我不知道不允许我更新数据库中的表的问题是什么
伙计们,我需要你的帮助,我需要通过使用 C# 的数据grid
来更新我的数据库,到目前为止,我所能做的就是能够看到我直接输入的 sql 服务器中的值。
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);
OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dAdapter);
不见了。MSDN 说:
//Without the OleDbCommandBuilder this line would fail.
dAdapter.Update(dTable);
您缺少将数据网格视图绑定到数据表的内容。这里的诀窍是你需要一个 BindingSource。
在"//填充数据"行之前添加以下内容
BindingSource bindSrc = new BindingSource();
然后更改 datagridview 的数据源,并将源添加到绑定源,如下所示:
dataGridView1.DataSource = bindSrc;
bindSrc.DataSource = dTable;
编辑:我忘了提到一件小事:要更新,您现在必须参考作为绑定源的数据表Srouce,这就是我的做法:
dAdapter.Update((DataTable)bindSrc.DataSource);
可能只是通过常规更新(dTable)来实现的,但如果不是,这可能会修复它
所以这基本上是我自己用于表单的。建立连接后,连接将打开,并用来自store_adj_note_detail_1的数据填充我的 datagridview1。请注意,我从不声明我的绑定源...我也不知道原因,但我尝试与其余的(全局)和本地声明它,两者都使代码中断:/
BindingSource 的声明发生在窗体的"设计"视图上 - 只需将其从窗体顶部的工具箱中拖动,它就会像 FileDialogs 和 Menustrips 一样显示一个图标。我个人只更改了 Name 属性,没有添加任何事件。
它应该为您提供打开连接、使用绑定源链接 datagridview 和数据表以及更新数据库所需的一切的概述。
我通过编辑我自己的代码来获得此代码,这些代码用于访问数据库,但是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;
}
}
}