C# 对象引用不是实例c的默认值
Hellow伙计们,我正在创建一个用于检查学生的桌面应用程序, 在我将我的数据库PostgresWith project链接并显示我的表格后,每当我尝试删除某些内容时,它都会显示此错误,ID_student和delete/UPDATE按钮会使用第一列更改位置,这是正常的 然后在我点击删除按钮之后 但在我的数据库中,用户被删除,在我的题词中添加了相同的错误apear,但我得到了这个错误 我搜索了许多解决方案,检查了我的变量,几乎失去了希望 这是我的桌子C# 对象引用不是实例c的默认值,c#,postgresql,visual-studio,datagridview,object-reference,C#,Postgresql,Visual Studio,Datagridview,Object Reference,Hellow伙计们,我正在创建一个用于检查学生的桌面应用程序, 在我将我的数据库PostgresWith project链接并显示我的表格后,每当我尝试删除某些内容时,它都会显示此错误,ID_student和delete/UPDATE按钮会使用第一列更改位置,这是正常的 然后在我点击删除按钮之后 但在我的数据库中,用户被删除,在我的题词中添加了相同的错误apear,但我得到了这个错误 我搜索了许多解决方案,检查了我的变量,几乎失去了希望 这是我的桌子 private new void Sele
private new void Select()
{
try
{
conn.Open();
sql= @"select etudiant.id_etudiant,etudiant.nom,etudiant.prenom,etudiant.age,etudiant.sexe,etudiant.num,class.nom_class
from etudiant
inner join class on etudiant.classess=class.id_class";
cmd = new NpgsqlCommand(sql, conn);
dt = new DataTable();
dt.Load(cmd.ExecuteReader());
conn.Close();
bunifuCustomDataGrid1.DataSource = null;//resete
bunifuCustomDataGrid1.DataSource = dt;
}
catch ( Exception ex)
{
conn.Close();
MessageBox.Show("ERROR" + ex.Message);
}
}
这是我的删除
{
if (bunifuCustomDataGrid1.Columns[e.ColumnIndex].Name == "Delete")
{
try
{
conn.Open();
sql = @"Select all from deleteEtudiant(:id_) ";
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("id_", int.Parse(bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["ID"].Value.ToString()));
if ((int)cmd.ExecuteScalar() == 1)
{
MessageBox.Show("Deleted");
}
conn.Close();
}
catch (Exception ex)
{
conn.Close();
MessageBox.Show("User deleted don't forget the bug yassine" + ex.Message);
}
}
if (bunifuCustomDataGrid1.Columns[e.ColumnIndex].Name == "Update")
{
try
{
conn.Open();
sql = @"Select * from updateETUDIANT(':id_,:ST_Firstname ,:ST_prenom ,:ST_Age,:ST_Sexe,:ST_num');
";
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("id_", int.Parse(bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["ID_etudiant"].Value.ToString()));
cmd.Parameters.AddWithValue("ST_Firstname", (bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["Nom"].Value.ToString()));
if ((int)cmd.ExecuteScalar() == 1)
{
MessageBox.Show("UPDATED");
Select();
}
conn.Close();
}
catch (Exception ex)
{
conn.Close();
MessageBox.Show("User UPDATED"+ex.Message);
Select();
}
}
很抱歉发了这么长的帖子,我希望你能告诉我如何改进
编辑:我有一个小问题,我的问题是错误的吗
public void Ajouter_Click(object sender, EventArgs e)
{
try
{
conn.Open();
sql = "insert into etudiant (Nom, prenom, sexe) " +
"values(@Nom, @prenom, @sexe);";
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("nom", bunifuMaterialTextbox1.Text);
cmd.Parameters.AddWithValue("prenom", bunifuMaterialTextbox2.Text);
//cmd.Parameters.AddWithValue("Age", bunifuMaterialTextbox2.ToString());//
cmd.Parameters.AddWithValue("sexe", bunifuMaterialTextbox3.Text);
//cmd.Parameters.AddWithValue("Num", bunifuMaterialTextbox6.Text);
//cmd.Parameters.AddWithValue("Classess", bunifuMaterialTextbox7.Text);
int result = (int)cmd.ExecuteScalar();
if (result==1)
{
conn.Close();
MessageBox.Show("Etudinat ajouter");
}
}
catch (Exception ex)
{
MessageBox.Show("ERROR" + ex.Message);
conn.Close();
}
}
它给了我与删除对象相同的错误对象引用我的答案是,您的选择是错误的?:
try
{
conn.Open();
sql = @"Select all from deleteEtudiant(:id_) ";
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("id_", int.Parse(bunifuCustomDataGrid1.Rows[e.RowIndex].Cells["ID"].Value.ToString()));
if ((int)cmd.ExecuteScalar() == 1)
{
MessageBox.Show("Deleted");
}
是否应该从deleteTudiant:id_u2;中选择*
编辑:对其他问题的回答:
conn.Open();
sql = "insert into etudiant (Nom, prenom, sexe) " +
"values(@Nom, @prenom, @sexe);";
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("nom", bunifuMaterialTextbox1.Text);
cmd.Parameters.AddWithValue("prenom", bunifuMaterialTextbox2.Text);
//cmd.Parameters.AddWithValue("Age", bunifuMaterialTextbox2.ToString());//
cmd.Parameters.AddWithValue("sexe", bunifuMaterialTextbox3.Text);
//cmd.Parameters.AddWithValue("Num", bunifuMaterialTextbox6.Text);
//cmd.Parameters.AddWithValue("Classess", bunifuMaterialTextbox7.Text);
int result = (int)cmd.ExecuteScalar();
您需要在参数中输入“@”。这样地:
因为在值中,参数名是@Nom、@prenom、@sexe
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@nom", bunifuMaterialTextbox1.Text);
cmd.Parameters.AddWithValue("@prenom", bunifuMaterialTextbox2.Text);
cmd.Parameters.AddWithValue("@sexe", bunifuMaterialTextbox3.Text);
我认为问题在于ExecuteScalar,使用ExecuteOnQuery代替它
int result = (int)cmd.ExecuteScalar();
替换为:
int result = cmd.ExecuteNonQuery();
首先,删除删除代码中的try-catch块,然后查看未设置的变量。哪一行导致错误-您是否尝试过在delete中的try块顶部添加断点?另外,请不要用您不关心的内容和屏幕截图来打扰我们,我们不关心。网站规则要求提供一个最小的示例-因此抛出错误的代码+确切的错误是的,复制/粘贴实际上已经足够了。谢谢你,先生,它可以工作,但它仍然是一样的,在我删除帖子后,行在应用程序中不会被删除,直到我重新打开它。你需要更新你的gridview。您可以再次调用Select方法,因此它将从数据库更新整个Gridview。或者Gridview类应该有一个方法来删除您试图删除的行。我还更新了我对另一个问题的回答。仍然是相同的错误,但它已添加到数据库中。也许此站点可以帮助您。我有一个问题,如何更改“cmd.Parameters”。AddWithValue@age,bunifuMaterialTextbox1.Text;'使用parse?cmd.Parameters字符串。AddWithValue@age,bunifuMaterialTextbox1.Text!=字符串是空的吗?bunifuMaterialTextbox1.Text:DBNull.Value;如果“年龄”文本框为空,则数据库中的年龄值将为空。在我做了所有事情之后,我有一个我不知道何时删除的错误。它告诉我已删除,然后表将被删除,默认表将被删除,就像我的postgres数据库中的表一样。有什么问题吗?