0

在我的 .NET 4.5、C# 应用程序中,我在 SQL Server 2012 的一行中插入了 90 个加值。其中一些值被插入到“浮点”列中。但是,此“浮点”列的某些源值小于 0。在这些特定列上,我需要将空值插入列中,或者根本不插入列中。

关于如何最好地实现这一点的任何建议。

我尝试使用具有 Variant 类型的 SqlParameter,并将值转换为“对象”,但这不是最好的解决方案。

4

3 回答 3

2
INSERT INTO YourTable (FloatColumn)
SELECT CASE TestValue
          WHEN FloatColumn<0 THEN NULL ELSE TestValue
       END
FROM SourceTable
于 2012-11-09T20:19:43.600 回答
0

一种选择是使用INSTEAD OF INSERT触发器。

有关示例,请参阅 MSDN 上的以下文章。

http://msdn.microsoft.com/en-us/library/ms175089(v=SQL.105).aspx

可以在视图或表上定义 INSTEAD OF INSERT 触发器以替换 INSERT 语句的标准操作。

此触发器将在插入时触发,您的逻辑可以检测值并采取适当的操作,例如如果值小于 0,则将 null 插入该字段。

于 2012-11-09T20:19:08.563 回答
0

当您为 SQL 调用构建参数列表时,悬挂 C# 的浮点类型的一个小扩展方法应该可以很好地帮助您:

public static SqlParameter PositiveOrNullSqlParameter( this float value , string name )
{
    return PositiveOrNullSqlParameter( (double) value , name ) ;
}
public static SqlParameter PositiveOrNullSqlParameter( this double value , string name )
{
    SqlParameter p = new SqlParameter( name , System.Data.SqlDbType.Float ) ;
    p.Value = ( value > 0 ? (object) value : (object) DBNull.Value ) ;
    return p ;
}

一旦你有了...

int insertDataIntoMyTable( double p1 , double p2 , ... , double p99 )
{
    int rowcount ;
    string connectString = ConfigurationManager.ConnectionStrings[ "MyConnectionString" ].ConnectionString ;

    using ( SqlConnection conn = new SqlConnection(  ) )
    using ( SqlCommand    cmd  = conn.CreateCommand() )
    {
        cmd.CommandText = "insertDataIntoTable" ;
        cmd.CommandType = CommandType.StoredProcedure ;

        cmd.Parameters.Add( p1.PositiveOrNullSqlParameter( "@p01" ) ;
        cmd.Parameters.Add( p2.PositiveOrNullSqlParameter( "@p02" ) ;
        .
        .
        .
        cmd.Parameters.Add( p99.PositiveOrNullSqlParameter( "@p99" ) ;

        rowcount = cmd.ExecuteNonQuery() ;

    }

    return rowcount ;
}
于 2012-11-09T21:28:48.877 回答