我有一个名为MesaiBilgileri
和Id
列,AdiSoyadi
,Mesai
,MesaiTarih
...
我会使用以下代码从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");
}
}
当我按下保存按钮时,我看到确认消息框但是表格没有更新......没有错误...我是新编码的,所以我该怎么办?
对不起我的英文:/
答案 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");