C# datagridview和npgsql的更新命令出现问题

C# datagridview和npgsql的更新命令出现问题,c#,datagridview,npgsql,C#,Datagridview,Npgsql,我对NpgsqlCommandBuilder和datagridview有一些问题 用数据填充datagridview没有问题,但我无法让updatecommand正常工作 我的代码如下所示 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text;

我对NpgsqlCommandBuilder和datagridview有一些问题

用数据填充datagridview没有问题,但我无法让updatecommand正常工作

我的代码如下所示

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Npgsql;

namespace Golfklubben
{
    public partial class LaggTillResultat : Form
    {
        private databaseConnection dataConnection = new databaseConnection();
        private BindingSource bindingSource1 = new BindingSource();
        private NpgsqlDataAdapter daResult = new NpgsqlDataAdapter();

        public LaggTillResultat()
        {
            InitializeComponent();
            FillTavlingar();
            dataGridView1.DataSource = bindingSource1;
            FillResultat();
            dataGridView1.Columns[0].HeaderText = "Deltagare";
            dataGridView1.Columns[1].HeaderText = "Poäng";
        }

        /// <summary>
        /// Metod för att fylla en combobox med tävlingar från databasen med en dataadapter 
        /// Method for filling a combobox with data from the database
        /// </summary>
        private void FillTavlingar()
        {
            DateTime date = DateTime.Now;
            string strDate = date.ToString("yyyy-MM-dd");
            try
            {
                DataTable table = new DataTable();
                NpgsqlConnection conn = new NpgsqlConnection(dataConnection.getConnection());
                NpgsqlDataAdapter da = new NpgsqlDataAdapter();
                NpgsqlCommand command = new NpgsqlCommand("SELECT tavlingsID, titel FROM tavlingar WHERE datum > @datum ORDER BY titel ASC;", conn);
                command.Parameters.AddWithValue("@datum", strDate);
                da.SelectCommand = command;

                da.Fill(table);
                cbTavling.DataSource = table.DefaultView;
                cbTavling.DisplayMember = "titel";
                cbTavling.ValueMember = "tavlingsID";
            }
            catch (Exception err)
            {
                MessageBox.Show("Ett fel uppstod när tävlingarna skulle hämtas " + err.ToString(), "Fel vid uppdatering av handicap", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        /// <summary>
        /// Metod för att fylla en datagridview med resultat från databasen
        /// Method for filling the datagridview with data from the datbase
        /// </summary>
        private void FillResultat()
        {
            if (cbTavling.SelectedValue == null)
            {
                MessageBox.Show("Det finns ingen tävling idag!\nDialogrutan kommer att stängas.");
                this.Close();
            }

            try
            {
                NpgsqlConnection conn = new NpgsqlConnection(dataConnection.getConnection());
                NpgsqlCommand command = new NpgsqlCommand("SELECT golfid, resultat FROM anmalningar WHERE tavlingsid = @tavlingsID ORDER BY golfid ASC;", conn);
                command.Parameters.AddWithValue("@TavlingsID", cbTavling.SelectedValue.ToString());

                daResult = new NpgsqlDataAdapter(command);

                NpgsqlCommandBuilder cb = new NpgsqlCommandBuilder(daResult);

                DataTable dt = new DataTable();
                dt.Locale = System.Globalization.CultureInfo.InvariantCulture;

                daResult.Fill(dt);
                bindingSource1.DataSource = dt;

            }
            catch (Exception err)
            {
                MessageBox.Show("FEL" + err.ToString());
            }

        }

        private void btnSpara_Click(object sender, EventArgs e)
        {

            try
            {
                daResult.Update((DataTable)bindingSource1.DataSource);
            }
            catch (Exception err)
            {
                MessageBox.Show(err.ToString());
            }

            FillResultat();
        }

        private void cbTavling_SelectedIndexChanged(object sender, EventArgs e)
        {
            FillResultat();
        }

        /// <summary>
        /// Hanterar formclosing eventet som körs när formuläret håller på att stängas, gömmer formuläret istället för att stänga det.
        /// Det här är för att det annars inte går att öppna upp formuläret igen.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            this.Hide();
            e.Cancel = true;
        }

        private void btnAvbryt_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Vill du stänga formuläret?", "Stänger formuläret", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (result == DialogResult.Yes)
            {
                this.Hide();
            }
            else
                return;
        }
    }


}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用Npgsql;
名称空间Golfkluben
{
公共部分类LaggTillResultat:表单
{
专用databaseConnection dataConnection=新建databaseConnection();
private BindingSource bindingSource1=新BindingSource();
专用NpgsqlDataAdapter daResult=新的NpgsqlDataAdapter();
公共LaggTillResultat()
{
初始化组件();
FillTavlingar();
dataGridView1.DataSource=bindingSource1;
FillResultat();
dataGridView1.Columns[0].HeaderText=“Deltagare”;
dataGridView1.Columns[1]。HeaderText=“Poäng”;
}
/// 
///Metod för att fylla en combobox med tävlingar från Database med en dataadapter
///用数据库中的数据填充组合框的方法
/// 
私有无效填充Tavlingar()
{
DateTime date=DateTime.Now;
字符串strDate=date.ToString(“yyyy-MM-dd”);
尝试
{
DataTable=新的DataTable();
NpgsqlConnection conn=新的NpgsqlConnection(dataConnection.getConnection());
NpgsqlDataAdapter da=新的NpgsqlDataAdapter();
NpgsqlCommand=新的NpgsqlCommand(“选择tavlingsID,tavlingar中的titel,其中datum>@datum ORDER BY titel ASC;”,conn);
command.Parameters.AddWithValue(“@datum”,标准日期);
da.SelectCommand=命令;
da.填写(表格);
cbTavling.DataSource=table.DefaultView;
cbTavling.DisplayMember=“titel”;
cbTavling.ValueMember=“tavlingsID”;
}
捕获(异常错误)
{
MessageBox.Show(“Ett fel uppstod när tävlingarna skulle hämtas”+err.ToString(),“fel vid uppdatering av disability”,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
/// 
///Metod för att fylla数据网格视图医学结果数据库
///用数据库中的数据填充datagridview的方法
/// 
私有void FillResultat()
{
if(cbTavling.SelectedValue==null)
{
MessageBox.Show(“Det finns ingen tävling idag!\n Dialogrutan kommer att stängas”);
这个。关闭();
}
尝试
{
NpgsqlConnection conn=新的NpgsqlConnection(dataConnection.getConnection());
NpgsqlCommand=new NpgsqlCommand(“选择golfid,来自anmalningar的结果,其中tavlingsid=@tavlingsid ORDER BY golfid ASC;”,康涅狄格州);
command.Parameters.AddWithValue(“@TavlingsID”,cbTavling.SelectedValue.ToString());
daResult=新的NpgsqlDataAdapter(命令);
NpgsqlCommandBuilder cb=新的NpgsqlCommandBuilder(daResult);
DataTable dt=新的DataTable();
dt.Locale=System.Globalization.CultureInfo.InvariantCulture;
数据结果填充(dt);
bindingSource1.DataSource=dt;
}
捕获(异常错误)
{
Show(“FEL”+err.ToString());
}
}
私有无效btnSpara\U单击(对象发送方,事件参数e)
{
尝试
{
更新((DataTable)bindingSource1.DataSource);
}
捕获(异常错误)
{
Show(err.ToString());
}
FillResultat();
}
私有void cbTavling_SelectedIndexChanged(对象发送方,事件参数e)
{
FillResultat();
}
/// 
///汉特拉尔·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·福姆雷特·斯特雷特。
///详细的härär för att annars inte går attöppna upp formuläret igen。
/// 
/// 
FormClosing(FormClosingEventArgs e)时受保护的覆盖无效
{
this.Hide();
e、 取消=真;
}
私有void btnAvbryt_单击(对象发送方,事件参数e)
{
DialogResult result=MessageBox.Show(“stänga formuläret村?”,“stänger formuläret”,MessageBoxButtons.YesNo,MessageBoxIcon.Warning);
if(result==DialogResult.Yes)
{
this.Hide();
}
其他的
返回;
}
}
}
我使用了MSDN的这个教程来解决这个问题。

请使用conn.Open();在执行命令之前

比如说

           DataTable table = new DataTable();
            NpgsqlConnection conn = new NpgsqlConnection(dataConnection.getConnection());
            conn.Open();
            NpgsqlDataAdapter da = new NpgsqlDataAdapter();
            NpgsqlCommand command = new NpgsqlCommand("SELECT tavlingsID, titel FROM tavlingar WHERE datum > @datum ORDER BY titel ASC;", conn);
            command.Parameters.AddWithValue("@datum", strDate);
            da.SelectCommand = command;

            da.Fill(table);

在您更新您的问题之前,没有人能够帮助您:仅包含相关代码、什么“不起作用”,以及您到目前为止试图做什么