我正在尝试插入或更新(基于数据库中是否存在产品)
for (int i = 0; i < dtgartikulli.Rows.Count; i++)
{
SqlCommand cmdkontrolla = new SqlCommand("barkodicheck", conn);
cmdkontrolla.CommandType = CommandType.StoredProcedure;
cmdkontrolla.Parameters.AddWithValue("@barkodi", Convert.ToString(dtgartikulli.Rows[i].Cells[0].Value));
SqlDataAdapter adapt = new SqlDataAdapter(cmdkontrolla);
DataSet ds = new DataSet();
adapt.Fill(ds);
conn.Close();
int count = ds.Tables[0].Rows.Count;
//nese është barazi me 1, shfaqe dritaren pasuese
if (count == 0)
{
SqlCommand cmdinsertimi = new SqlCommand("insertprodukti", conn);
cmdinsertimi.CommandType = CommandType.StoredProcedure;
SqlParameter ibarkodi = cmdinsertimi.Parameters.Add("@barkodi", SqlDbType.Int);
SqlParameter iemertimi = cmdinsertimi.Parameters.Add("@emertimi", SqlDbType.VarChar, 200);
SqlParameter isasia = cmdinsertimi.Parameters.Add("@sasia", SqlDbType.Int);
SqlParameter istoku = cmdinsertimi.Parameters.Add("@stoku", SqlDbType.Int);
SqlParameter icmimi = cmdinsertimi.Parameters.Add("@cmimi", SqlDbType.Float);
SqlParameter icmimif = cmdinsertimi.Parameters.Add("@cmimif", SqlDbType.Float);
SqlParameter ifitimi = cmdinsertimi.Parameters.Add("@fitimi", SqlDbType.Float);
SqlParameter itvsh = cmdinsertimi.Parameters.Add("@tvsh", SqlDbType.Float);
SqlParameter ikategoria = cmdinsertimi.Parameters.Add("@kategoria", SqlDbType.VarChar, 100);
SqlParameter idata = cmdinsertimi.Parameters.Add("@data", SqlDbType.DateTime);
SqlParameter ishtuarnga = cmdinsertimi.Parameters.Add("@shtuarnga", SqlDbType.VarChar, 100);
SqlParameter injesia = cmdinsertimi.Parameters.Add("@njesia", SqlDbType.VarChar, 50);
foreach (DataGridViewRow row in dtgartikulli.Rows)
{
if (!row.IsNewRow)
{
ibarkodi.Value = row.Cells[0].Value;
iemertimi.Value = row.Cells[1].Value;
isasia.Value = "1";
istoku.Value = row.Cells[3].Value;
icmimi.Value = row.Cells[2].Value;
icmimif.Value = row.Cells[4].Value;
ifitimi.Value = row.Cells[5].Value;
itvsh.Value = row.Cells[7].Value;
ikategoria.Value = row.Cells[6].Value;
idata.Value = DateTime.Now;
ishtuarnga.Value = lbluseri.Text;
injesia.Value = row.Cells[9].Value;
cmdinsertimi.ExecuteNonQuery();
}
}
}
else if (count == 1)
{
for (int j = 0; j < dtgartikulli.Rows.Count; j++)
{
SqlCommand cmdeditimi = new SqlCommand("updatestokublerja", conn);
cmdeditimi.CommandType = CommandType.StoredProcedure;
cmdeditimi.Parameters.AddWithValue("@barkodi", Convert.ToString(dtgartikulli.Rows[j].Cells[0].Value));
cmdeditimi.Parameters.AddWithValue("@sasi", Convert.ToString(dtgartikulli.Rows[j].Cells[3].Value));
conn.Open();
cmdeditimi.ExecuteNonQuery();
conn.Close();
}
}
clear();
conn.Close();
dtgartikulli.DataSource = null;
dtgartikulli.Refresh();
}
}
}
}
首先我正在检查条形码是否确实存在(cmdkontrolla.Parameters.AddWithValue(“ @ barkodi”,Convert.ToString(dtgartikulli.Rows [i] .Cells [0] .Value)); )
SP代码:
ALTER procedure [dbo].[barkodicheck]
@barkodi int
as
select Barkodi from tabela_produktet where
Barkodi = @barkodi
ALTER procedure [dbo].[updatestokublerja]
@barkodi int,
@sasi int
as
update tabela_produktet set Stoku = Stoku + @sasi
where
Barkodi = @barkodi
如果count == 0,则应插入数据 否则,如果count == 1,则应该更新数据(提供了数量)
对现有数据的数量更新正在执行中(计数== 1情况),但是如果数据不存在则不插入新产品(计数== 0情况) 计数== 1块代码内的代码有什么问题
谢谢大家
答案 0 :(得分:0)
您是否检查过表格上的Stoku字段是否不为null?因为如果value = null,那么更新中传递的所有值都不会更改字段的值。
update tabela_produktet set Stoku = Stoku + @sasi
where
Barkodi = @barkodi
也许您可以将命令更改为:
更新tabela_produktet设置Stoku = ISNULL(Stoku,0)+ @sasi 哪里 Barkodi = @barkodi
如果您的问题出在Count == 0,那么我已经成功尝试了此代码。
SqlConnection conn = new SqlConnection("Server=(localdb)\\MSSQLLocalDB;Database=xxxxx;Integrated Security=True;");
try
{
var codebar = 12345;
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("@ProductId", codebar)
};
conn.Open();
SqlCommand cmd = new SqlCommand("spu_GetCodeBar", conn);
cmd.Parameters.AddRange(parameters);
cmd.CommandType = CommandType.StoredProcedure;
var reader = cmd.ExecuteReader();
if (reader != null && reader.Read())
{
var code = reader["ProductID"];
MessageBox.Show($"I've found the record {code}!");
// do what you want to do
}
else
{
MessageBox.Show("Record not found!");
}
}
finally
{
conn.Close();
}