伙计们这就是我的想法我无法弄清楚什么是不允许我更新数据库中的表的概率
伙计我需要你的帮助我需要使用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);
答案 0 :(得分:0)
OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dAdapter);
缺少。 MSDN说:
//Without the OleDbCommandBuilder this line would fail.
dAdapter.Update(dTable);
答案 1 :(得分:0)
您遗漏了将datagridview绑定到数据表的内容。这里的诀窍是你需要一个BindingSource。
在'// fille the datatble'行
之前添加以下内容BindingSource bindSrc = new BindingSource();
然后更改datagridview的数据源并将源添加到bindingsource,如下所示:
dataGridView1.DataSource = bindSrc;
bindSrc.DataSource = dTable;
编辑:我忘了提一件小事:要更新,你现在必须引用你的bindingSrouce来源的数据表,这就是我做的:
dAdapter.Update((DataTable)bindSrc.DataSource);
可能只使用常规更新(dTable),但如果没有,这可能会修复它
答案 2 :(得分: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;
}
}
}