Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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# 使用visual c中的文本框向数据库中的现有记录添加新值的更新查询#_C#_Sql Server - Fatal编程技术网

C# 使用visual c中的文本框向数据库中的现有记录添加新值的更新查询#

C# 使用visual c中的文本框向数据库中的现有记录添加新值的更新查询#,c#,sql-server,C#,Sql Server,上面的代码有什么问题? . . . 有错误[标量变量@ADVANCE_SAL未声明]的修改代码如下: updatequery = @"UPDATE EMP_DETAILS SET ADVANCE_SAL = 'ADVANCE_SAL + '" + Convert.ToDecimal(txtADV.Text) + "'' WHERE EMP_ID = '" + Convert.ToInt64(txtEID.Text) + "')"; 错误是您用单引号括住了ADVANCE\u SAL。为了使s

上面的代码有什么问题? . . . 有错误[标量变量@ADVANCE_SAL未声明]的修改代码如下:

updatequery = @"UPDATE EMP_DETAILS SET ADVANCE_SAL = 'ADVANCE_SAL + '" + 
Convert.ToDecimal(txtADV.Text) + "'' WHERE EMP_ID = '" + 
Convert.ToInt64(txtEID.Text) + "')";

错误是您用单引号括住了
ADVANCE\u SAL
。为了使sql注入更干净、更安全,必须参数化查询

            var c = dtimePick.Value.TimeOfDay;
            SqlParameter param = new SqlParameter("@ADVANCE_SAL", SqlDbType.Decimal);
            param.Value = Convert.ToDecimal(txtADV.Text);
            command.Parameters.Add(param);


            updatequery = @"UPDATE EMP_DETAILS SET ADVANCE_SAL = ADVANCE_SAL +  @ADVANCE_SAL , LATEST_ADVANCE_DATE = '"+c+"' WHERE ENAME = '"+txtEID.Text+"' ";

为什么要在EMP\u ID和ADVANCE\u SAL中添加单引号?它们是数字的,不需要,我想下面是您想要的

updatequery = @"UPDATE EMP_DETAILS 
                SET ADVANCE_SAL = ADVANCE_SAL + @ADVANCE_SAL
                WHERE EMP_ID = @EMP_ID"


using (SqlConnection connection = new SqlConnection(/* connection info */))
{
    using (SqlCommand command = new SqlCommand(updatequery , connection))
    {
        // must do proper error handling
        connection.Open();
        command.Parameters.Add(new SqlParameter("ADVANCE_SAL", Convert.ToDecimal(txtADV.Text)));
        command.Parameters.Add(new SqlParameter("EMP_ID", Convert.ToInt64(txtEID.Text)));
        int results = command.ExecuteNonQuery();
    }
}
试试这个

updatequery=@“更新EMP\u详细信息集ADVANCE\u SAL='ADVANCE\u SAL+'”+
Convert.ToDecimal(txtADV.Text)+“其中(EMP_ID=”””+

转换.ToInt64(txtEID.Text)+“')”您的实现存在许多问题

1-SQL注入漏洞-有关此漏洞的详细信息

2-您的查询建筑不正确,应该如下所示。(对于
ADVANCE\u SAL
,引号不正确)

3-如果任何员工未选择预支工资(在这种情况下,
预支工资
值在表中可以为空)。您的查询将使用
NULL
更新为
NULL+SomeValue=NULL

比如说

updatequery = @"UPDATE EMP_DETAILS SET ADVANCE_SAL = ADVANCE_SAL + " + 
Convert.ToDecimal(txtADV.Text) + " WHERE EMP_ID = '" + 
Convert.ToInt64(txtEID.Text) + "'";
输出

SELECT NULL +10.0 AS Total

您收到的错误消息是什么?您的查询应该是这样的:
updateemp\u DETAILS SET ADVANCE\u SAL='ADVANCE\u SAL'+CAST(txtADV.Text为十进制(20,2))+'WHERE EMP\u ID='+CAST(txtEID.Text为bigint)+')
Format Exceptionunhandled@SandipPatel:它表示“'+CAST(txtav.Text为十进制(20,2))附近的语法不正确”+'是的,因为我提供了sql查询,而您在c#上编写,所以我认为John给出了正确的详细答案。谢谢您的回答。但是,在我的数据库中,EMP_ID的数据类型是bigint..我们正在进行的转换类型,即Convert.ToInt64(txtEID.Text)对吗?
SELECT NULL +10.0 AS Total
Total
-----
NULL