问题出现在executeScalar上,我的sql语句没有返回任何内容
我的表格中有一些Int32类型的值,其他日期时间值可以为空。 我想要的是当用户没有填充文本框以插入空值而不是“”(空格)时,我的字段的类型不正确。
我尝试了以下想法:
insertActor.Parameters.AddWithValue("@School2StartYear", String.IsNullOrWhiteSpace(txtSchool2StartYear.Text) ? (object)DBNull.Value : (object)Int16.Parse(txtSchool2StartYear.Text));
我必须为 15个表格(包含30多个字段)执行此操作。
我也看过jQuery的.validate()
函数,但我根本没试过。
我也看到了这个想法:[DisplayFormat(ConvertEmptyStringToNull = true)]
我是否必须在数据库中执行此操作?当添加''时将其转换为NULL?
这是最好的方法吗?检查所有文本框是否为IsNullOrWhiteSpace
答案 0 :(得分:1)
我通常只是排除参数:
Int16 school2StartYear;
if (Int16.TryParse(txtSchool2StartYear.Text, out school2StartYear) {
insertActor.Parameters.AddWithValue("@School2StartYear", school2StartYear);
}
您的SQL代码会将参数声明为@School2StartYear smallint = NULL
,以便在排除参数时使用NULL
作为默认值。
答案 1 :(得分:1)
异常可能是因为语句的结果为null,而不是因为输入值不正确。尝试将执行拆分为:
object result = insertActor.ExecuteScalar();
newID = Int32.Parse(result.ToString());
我怀疑结果是null,这会在调用ToString方法时导致NullReferenceException。
新id应该来自return语句,输出参数,select语句吗?
答案 2 :(得分:0)
您可以使用IsDBNull检查
Convert.IsDBNull (txtSchool2StartYear) ? 0:int.Parse (txtSchool2StartYear);