SqlDataAdapter插入数据库不工作c# winform

本文关键字:winform 工作 插入 数据库 SqlDataAdapter | 更新日期: 2023-09-27 18:16:57

我正在尝试将数据插入SQL Server数据库并从c# Winforms显示在DatagridView上。

我点击插入按钮,没有错误显示,但没有数据被插入到数据库和Datagridview变为空白。

我重新调试,可以看到数据更新在datagridview,但数据库不在Visual Studio Server Explorer数据库(picture1)。

另一方面。我在单击Insert Button时设置断点,跳过第42~46行。直接到第50行ex(图2)

picture1

picture2

编辑:现在的问题是,当我点击插入按钮,datagridview有更新新的数据。但是数据库没有插入新的数据。数据库只有两个数据

Edit2 我改变了连接字符串AttachDbFilename。AttachDbFilename=C:'Vis'NO4'WindowsFormsApplication1'App_Dat‌​a'Database1.mdf;该值可以插入数据库。

下面是连接字符串:

<add name="con1" connectionString="Data Source=(LocalDB)'v11.0;AttachDbFilename=|DataDirectory|'Database1.mdf;Integrated Security=True"
        providerName="System.Data.SqlClient" />

Form_load和load_grid函数

SqlConnection con;
    SqlDataAdapter da;
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    public Form1()
    {
        InitializeComponent();
        string connectionString = ConfigurationManager.ConnectionStrings["con1"].ConnectionString;
        con = new SqlConnection(connectionString);
    }
    private void Form1_Load(object sender, EventArgs e)
    {
       load_grid();
    }
    public void load_grid()
    {
        dt.Clear();
        SqlDataAdapter da1 = new SqlDataAdapter();
        try
        {
            string sql = "SELECT * FROM profile";
            con.Open();
            da1.SelectCommand = new SqlCommand(sql, con);
            da1.Fill(ds);
            da1.Fill(dt);
            con.Close();
            dataGridView1.DataSource = dt;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

插入按钮

 private void button1_Click(object sender, EventArgs e)
    {
        string ac = textBox1.Text;
        string bd = textBox2.Text;
        string sex = textBox2.Text;
        string sql = "INSERT INTO profile(ac,bd,sex)VALUES('" + ac + "','" + bd + "','" + sex + "')";
        try
        {
            con.Open();
            da = new SqlDataAdapter();
            da.InsertCommand = new SqlCommand(sql, con);
            da.InsertCommand.ExecuteNonQuery();
            da.Update(dt);
            MessageBox.Show("INsert success...!!");
            load_grid();
            con.Close();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

这是客户表的设计

CREATE TABLE [dbo].[profile] (
[Id]  INT           IDENTITY (1, 1) NOT NULL,
[ac]  NVARCHAR (50) NULL,
[bd]  NVARCHAR (50) NULL,
[sex] NVARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC));

不知道问题出在哪里

SqlDataAdapter插入数据库不工作c# winform

Picture2显示连接已经打开的异常,因此,在打开连接之前尝试以下操作。在关闭连接之前,您正在呼叫load_grid();。我已经更新了所有的代码,使用它如下所示:

编辑-第二次修订:

public void load_grid()
    {
        dt.Clear();
        SqlDataAdapter da1 = new SqlDataAdapter();
        try
        {
            string sql = "SELECT * FROM profile";
            con.Open();
            da1.SelectCommand = new SqlCommand(sql, con);
            da1.Fill(ds);
            da1.Fill(dt);
            con.Close();
            dataGridView1.DataSource = dt;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            if (con.State != System.Data.ConnectionState.Closed)
                con.Close();
        }
    }

 private void button1_Click(object sender, EventArgs e)
        {
            string ac = textBox1.Text;
            string bd = textBox2.Text;
            string sex = textBox2.Text;
            string sql = "INSERT INTO profile(ac,bd,sex)VALUES('" + ac + "','" + bd + "','" + sex + "')";
            try
            {
                con.Open();
                da = new SqlDataAdapter();
                da.InsertCommand = new SqlCommand(sql, con);
                da.InsertCommand.ExecuteNonQuery();
                da.Update(dt);
                con.Close();
                MessageBox.Show("INsert success...!!");
                load_grid();               
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (con.State != System.Data.ConnectionState.Closed)
                    con.Close();
            }
        }