读书人

datagridview直接更新数据库,该怎么解

发布时间: 2012-04-03 12:38:19 作者: rapoo

datagridview直接更新数据库
SqlConnection conn = new SqlConnection("server=.;database=student;integrated security=true");
conn.Open();
DataSet ds = new DataSet();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("select * from users", conn);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Fill(ds,"users");
dt = ds.Tables["users"];
dt.PrimaryKey = new DataColumn[] { dt.Columns["userID"] };
for (int i = 0; i < dt.Rows.Count;i++ )
{
DataRow dr = dt.Rows.Find(Int32.Parse(dt.Rows[i][0].ToString()));
for (int j = 1; j < dt.Columns.Count; j++)
{
dr[j] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
da.Update(ds,"users");
}
dataGridView1.Update();
conn.Close();
我的数据表中没有主键,但在Table里添加了,但怎么还是报错了?这用datagridview更新没有主键的数据表到底怎么样做的啊?哪位能帮我解决一下?谢谢

[解决办法]
要使用SqlDataAdapter进行数据更新,数据库表中要有主键,否则其自动生成的DeleteCommand和UpdateCommand无法使用
建议在数据库表中添加主键
否则只有在更新时,先删除数据库表的全部旧数据,再插入全部新数据
[解决办法]
msdn代码:

C# code
using System;using System.Data;using System.Data.SqlClient;using System.Windows.Forms;public class Form1 : System.Windows.Forms.Form{    private DataGridView dataGridView1 = new DataGridView();    private BindingSource bindingSource1 = new BindingSource();    private SqlDataAdapter dataAdapter = new SqlDataAdapter();    private Button reloadButton = new Button();    private Button submitButton = new Button();    [STAThreadAttribute()]    public static void Main()    {        Application.Run(new Form1());    }    // Initialize the form.    public Form1()    {        dataGridView1.Dock = DockStyle.Fill;        reloadButton.Text = "reload";        submitButton.Text = "submit";        reloadButton.Click += new System.EventHandler(reloadButton_Click);        submitButton.Click += new System.EventHandler(submitButton_Click);        FlowLayoutPanel panel = new FlowLayoutPanel();        panel.Dock = DockStyle.Top;        panel.AutoSize = true;        panel.Controls.AddRange(new Control[] { reloadButton, submitButton });        this.Controls.AddRange(new Control[] { dataGridView1, panel });        this.Load += new System.EventHandler(Form1_Load);        this.Text = "DataGridView databinding and updating demo";    }    private void Form1_Load(object sender, System.EventArgs e)    {        // Bind the DataGridView to the BindingSource        // and load the data from the database.        dataGridView1.DataSource = bindingSource1;        GetData("select * from Customers");    }    private void reloadButton_Click(object sender, System.EventArgs e)    {        // Reload the data from the database.        GetData(dataAdapter.SelectCommand.CommandText);    }    private void submitButton_Click(object sender, System.EventArgs e)    {        // Update the database with the user's changes.        dataAdapter.Update((DataTable)bindingSource1.DataSource);    }    private void GetData(string selectCommand)    {        try        {            // Specify a connection string. Replace the given value with a             // valid connection string for a Northwind SQL Server sample            // database accessible to your system.            String connectionString =                "Integrated Security=SSPI;Persist Security Info=False;" +                "Initial Catalog=Northwind;Data Source=localhost";            // Create a new data adapter based on the specified query.            dataAdapter = new SqlDataAdapter(selectCommand, connectionString);            // Create a command builder to generate SQL update, insert, and            // delete commands based on selectCommand. These are used to            // update the database.            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);            // Populate a new data table and bind it to the BindingSource.            DataTable table = new DataTable();            table.Locale = System.Globalization.CultureInfo.InvariantCulture;            dataAdapter.Fill(table);            bindingSource1.DataSource = table;            // Resize the DataGridView columns to fit the newly loaded content.            dataGridView1.AutoResizeColumns(                 DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);        }        catch (SqlException)        {            MessageBox.Show("To run this example, replace the value of the " +                "connectionString variable with a connection string that is " +                "valid for your system.");        }    }} 

读书人网 >C#

热点推荐