0

问题出在 executeScalar 上,我的 sql 语句没有返回任何内容

我的表中有一些值是 Int32 类型的,其他的 datetime 类型是可以为空的。我想要的是当用户没有填充文本框来插入空值而不是“”(空白),这对于我的字段来说是不正确的类型。

在此处输入图像描述

我试过这样的想法:

insertActor.Parameters.AddWithValue("@School2StartYear", String.IsNullOrWhiteSpace(txtSchool2StartYear.Text) ? (object)DBNull.Value : (object)Int16.Parse(txtSchool2StartYear.Text));

我必须为我的15 个表(有 30 多个字段)执行此操作。

我也看到了.validate()jQuery 的函数,但我根本没有尝试过。

我也看到了这个想法:[DisplayFormat(ConvertEmptyStringToNull = true)]

我必须在数据库中进行吗?添加''时将其转换为NULL?

那么这是最好的方法吗?检查所有文本框是否为 IsNullOrWhiteSpace

4

3 回答 3

1

我通常只排除参数:

Int16 school2StartYear;
if (Int16.TryParse(txtSchool2StartYear.Text, out school2StartYear) {
    insertActor.Parameters.AddWithValue("@School2StartYear", school2StartYear);
}

您的 SQL 代码将声明该参数,@School2StartYear smallint = NULL以便如果该参数被排除在外,则将其NULL用作默认值。

于 2012-07-23T06:23:42.387 回答
1

异常可能是因为语句的结果为空,而不是因为你输入的值不正确。尝试像这样拆分执行:

object result = insertActor.ExecuteScalar();
newID = Int32.Parse(result.ToString());

我怀疑结果为空,这会在调用 ToString 方法时导致 NullReferenceException。

新 id 是否应该来自 return 语句、输出参数、select 语句?

于 2012-07-23T06:33:00.127 回答
0

您可以检查 IsDBNull

Convert.IsDBNull (txtSchool2StartYear) ? 0:int.Parse (txtSchool2StartYear);
于 2012-07-23T05:57:15.460 回答