Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新库存系统的SQL命令_C#_Sql Server_Ado.net - Fatal编程技术网

C# 更新库存系统的SQL命令

C# 更新库存系统的SQL命令,c#,sql-server,ado.net,C#,Sql Server,Ado.net,我开发了一个库存系统,在销售表单中,我们有一个datagridview,我们填充项目,然后“结算”按钮从库存中删除项目。但我的代码有时不起作用,我们的库存项目与使用SQL命令剪切的项目不一样 例如:我有20部手机,当我剪掉3部时,剩下7或5部。我认为我的命令不太容易阅读 这是我的密码: try { mycon.Open(); int y = 0; for (int i = 0; i < Data1.Rows.Count; i++) { Sq

我开发了一个库存系统,在销售表单中,我们有一个datagridview,我们填充项目,然后“结算”按钮从库存中删除项目。但我的代码有时不起作用,我们的库存项目与使用SQL命令剪切的项目不一样

例如:我有20部手机,当我剪掉3部时,剩下7或5部。我认为我的命令不太容易阅读

这是我的密码:

try
{
    mycon.Open();
    int y = 0;

    for (int i = 0; i < Data1.Rows.Count; i++)
    {
        SqlCommand cmd5 = new SqlCommand("UPDATE Pharmacy_Items Set Quantity= Quantity - " + Data1.Rows[y].Cells[2].Value + " where ItemName='" + Data1.Rows[y].Cells[1].Value + "'", mycon);
        cmd5.ExecuteNonQuery();
        y += 1;
    }

    mycon.Close();
}
        catch (Exception)
        {
            MessageBox.Show("Erorr404");
        }
试试看
{
mycon.Open();
int y=0;
对于(int i=0;i
带参数代码:

mycon.Open();
                int y = 0;
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {

                    string sql = "UPDATE [dbo].[Pharmacy_Items] Set Quantity= Quantity - @Quantity where ItemName=@ItemName";

                    using (SqlCommand cmd5 = new SqlCommand(sql, mycon))
                    {
                        cmd5.CommandType = CommandType.Text;
                        var qunatityParam = new SqlParameter { Value = dataGridView1.Rows[y].Cells[2].Value, SqlDbType = SqlDbType.Int, ParameterName = "Quantity" };
                        var itemNameParam = new SqlParameter { Value = dataGridView1.Rows[y].Cells[1].Value, SqlDbType = SqlDbType.VarChar, ParameterName = "ItemName" };

                        cmd5.Parameters.Add(qunatityParam);
                        cmd5.Parameters.Add(itemNameParam);
                        cmd5.ExecuteNonQuery();
                    }

                    y += 1;
                }
                mycon.Close();
mycon.Open();
int y=0;
对于(int i=0;i
With是否显示在gridview中?同一项目可能会显示多次。因此,当您运行该命令时,它会多次更新。-您不应该将SQL语句连接在一起,而应该使用参数化查询来避免SQL注入。您应该创建一个
SqlCommand
,在
for
循环之前使用参数,然后在循环内部仅设置参数值,以执行command@SQLInjectionalert我添加了带参数的sql命令,请看一看(:你所说的
数量=数量-
?@RameshRajendran的意思是什么?@RameshRajendran我想减少数据库中的数量