Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 将Varchar数据类型转换为超出范围的datetime结果_C#_.net_Ado.net_Exception Handling_Datetime Parsing - Fatal编程技术网

C# 将Varchar数据类型转换为超出范围的datetime结果

C# 将Varchar数据类型转换为超出范围的datetime结果,c#,.net,ado.net,exception-handling,datetime-parsing,C#,.net,Ado.net,Exception Handling,Datetime Parsing,我有问题。我无法识别我的错误 int dt = Convert.ToInt32(Items.Rows[T1]["F14"].ToString().Trim()); int mn = Convert.ToInt32(Items.Rows[T1]["F15"].ToString().Trim()); int yr = Convert.ToInt32(Items.Rows[T1]["F16"].ToString().Trim()); string DtString = mn.ToString().Tr

我有问题。我无法识别我的错误

int dt = Convert.ToInt32(Items.Rows[T1]["F14"].ToString().Trim());
int mn = Convert.ToInt32(Items.Rows[T1]["F15"].ToString().Trim());
int yr = Convert.ToInt32(Items.Rows[T1]["F16"].ToString().Trim());
string DtString = mn.ToString().Trim() + "/" + dt.ToString().Trim() + "/" + yr.ToString().Trim();
DateTime RegExp = Convert.ToDateTime(DtString);

exp_date is datetime field in sqlserver.

string MyDtQry = "UPDATE MyTable SET exp_date='" + RegExp + "' where MyTable.id_no='" + AlmIDNo + "'";
但我得到了一个错误:

将Varchar数据类型转换为超出范围的datetime结果


好吧,我会以非常不同的方式处理这项任务:

  • 在将日、月和年作为整数后,我肯定不会将它们重新组合在一起并解析它们。只需使用:

    // Note the meaningful variable names here, btw...
    DateTime date = new DateTime(year, month, day);
    
  • 更新数据库时,我不会将值直接放入SQL语句中。改为使用参数化SQL语句,并将参数设置为
    date
    。这样,您就不必担心数据库需要与您提供的日期格式不同的日期格式。一般来说,您应该始终使用参数化SQL,而不是将值直接嵌入到SQL中,这样可以避免SQL注入攻击


现在,在完成所有这些操作之后,如果仍然出现错误,则应该检查要插入的实际数据。可能
项中的数据确实超出了SQL Server的范围。

好吧,我将以非常不同的方式处理此任务:

  • 在将日、月和年作为整数后,我肯定不会将它们重新组合在一起并解析它们。只需使用:

    // Note the meaningful variable names here, btw...
    DateTime date = new DateTime(year, month, day);
    
  • 更新数据库时,我不会将值直接放入SQL语句中。改为使用参数化SQL语句,并将参数设置为
    date
    。这样,您就不必担心数据库需要与您提供的日期格式不同的日期格式。一般来说,您应该始终使用参数化SQL,而不是将值直接嵌入到SQL中,这样可以避免SQL注入攻击


现在,在完成所有这些操作之后,如果仍然出现错误,则应该检查要插入的实际数据。可能
项中的数据确实超出了SQL Server的范围。

这一定是您指定的格式问题,例如您可能保存的是日期值列而不是月份列。

这一定是您指定的格式问题,与“月份”列类似,您可能会保存“日期值”列。

因为您没有显示任何输入,所以很难准确查看;然而,以下情况显然是危险的:

DateTime RegExp = Convert.ToDateTime(DtString);

string MyDtQry = "UPDATE MyTable SET exp_date='" + RegExp + "' where MyTable.id_no='" + AlmIDNo + "'";
即使我们忽略了您应该使用参数这一事实(您确实应该这样做),您也需要按照SQL server期望的方式格式化此日期,这可能与本地格式非常不同

但是,;不要费心格式化它!为此使用一个参数,它就会消失。这并不一定很难,例如:

完成了;完全安全,不受注入和(在本例中更可能)将数据格式化为字符串的问题的影响。

很难准确地看到,因为您没有显示任何输入;然而,以下情况显然是危险的:

DateTime RegExp = Convert.ToDateTime(DtString);

string MyDtQry = "UPDATE MyTable SET exp_date='" + RegExp + "' where MyTable.id_no='" + AlmIDNo + "'";
即使我们忽略了您应该使用参数这一事实(您确实应该这样做),您也需要按照SQL server期望的方式格式化此日期,这可能与本地格式非常不同

但是,;不要费心格式化它!为此使用一个参数,它就会消失。这并不一定很难,例如:

完成了;完全安全,不受注入和(在本例中更可能)将数据格式化为字符串的问题的影响