更新命令不起作用但没有错误

时间:2017-02-13 23:55:05

标签: c# sql sql-server sql-update

我有一个名为MesaiBilgileriId列,AdiSoyadiMesaiMesaiTarih ...

的表格

我会使用以下代码从PersonelBilgileri表中选择信息:

private void cboxAdSoyadMesai_SelectedIndexChanged(object sender, EventArgs e)
{
    string secilipersonel = cboxAdSoyadMesai.Text;
    baglan.Open();

    SqlCommand komut = new SqlCommand("Select *from PersonelBilgileri WHERE AdiSoyadi = '" + secilipersonel + "'", baglan);

    SqlDataReader oku = komut.ExecuteReader();

    while (oku.Read())
    {
        lbId.Text = oku["Id"].ToString();
    }

    baglan.Close();
}

我使用隐形标签来取物品ID以写另一张表......

然后使用此值,我将转到另一个表并使用以下代码更新该表:

private void mesaiekle()
{
    string secilitarih = dtpMesai.Value.ToShortDateString(); //combobox for pick date
    string secilipersonel = cboxAdSoyadMesai.Text; //combobox for pick employee
    int mesaiId;
    mesaiId = Convert.ToInt32(lbId.Text); //another table's Id value from invisible label...

    baglan.Open();

    SqlCommand komut = new SqlCommand("UPDATE MesaiBilgileri SET Id = '"+ mesaiId +"' , AdiSoyadi = '"+ secilipersonel +"' ,  Mesai = '" + cboxSaatMesai.Text + "' , MesaiTarih = @tarih", baglan);
    komut.Parameters.Add("@tarih", SqlDbType.DateTime).Value = secilitarih;

    komut.ExecuteNonQuery();

    baglan.Close();
}

按下保存按钮时使用此代码;

private void btnMesaiEkle_Click(object sender, EventArgs e)
{
    if ((cboxSaatMesai.Text == string.Empty) && (cboxAdSoyadMesai.Text == string.Empty))
    {
        MessageBox.Show("Eklemek İstediğiniz Mesai Bilgilerini Seçmek Zorundasınız", "HATA!!"); 
    }
    else
    {
        mesaiekle();
        MessageBox.Show("" + cboxAdSoyadMesai.Text + " İçin Mesai Eklendi", "Mesai Ekleme Durumu");
    }
}

当我按下保存按钮时,我看到确认消息框但是表格没有更新......没有错误...我是新编码的,所以我该怎么办?

对不起我的英文:/

2 个答案:

答案 0 :(得分:1)

你必须在这里注意几件事。您正在处理此单个查询中的不同数据类型,变量mesaiId被定义为整数(不确定该字段在数据库中的定义方式)。你不需要在一对单引号中传递一个整数值。为什么有些值是参数?为什么不是整个查询参数?尝试一下:

SqlCommand komut = new SqlCommand("UPDATE MesaiBilgileri SET Id = @mesaiId, AdiSoyadi =@secilipersonel,Mesai = @cboxSaatMesai, MesaiTarih = @tarih", baglan);

komut.Parameters.Add("@mesaiId", SqlDbType.Int).Value = mesaiId;
komut.Parameters.Add("@secilipersonel", SqlDbType.VarChar).Value = secilipersonel;
komut.Parameters.Add("@cboxSaatMesai", SqlDbType.VarChar).Value = cboxSaatMesai.Text;
komut.Parameters.Add("@tarih", SqlDbType.DateTime).Value = secilitarih;

komut.ExecuteNonQuery();

注意: - 请记住,它会更新表中的所有行,因为您没有指定任何条件,如果您需要更新特定的行,那么您必须添加Where Id = @mesaiId或类似的东西

答案 1 :(得分:0)

string secilitarih = dtpMesai.Value.ToShortDateString();

在不使用参数的情况下构建更新命令:

SqlCommand komut = new SqlCommand("UPDATE MesaiBilgileri SET Id = '"
                                  + mesaiId 
                                  +"' , AdiSoyadi = '"
                                  + secilipersonel 
                                  +"' ,  Mesai = '" 
                                  + cboxSaatMesai.Text 
                                  + "' , MesaiTarih = " 
                                  + "cast ('" + secilitarih  + "' as datetime) "
                                  + ", baglan);

添加消息框或断点以检查命令文本。

MessageBox.Show(komut.CommandText);

如果日期格式有问题,请将secilitarih更改为:

string secilitarih = dtpMesai.Value.ToString("yyyy-MM-dd");