C# SQL Server 2012,当值小于0时插入null
在我的.NET4.5 C#应用程序中,我在SQLServer2012中将90多个值插入到一行中。一些值被插入到“float”列中。但是,此“float”列的某些源值小于0。对于这些特定的列,我需要在列中插入null,或者根本不在列中插入 关于如何最好地实现这一点的任何建议C# SQL Server 2012,当值小于0时插入null,c#,.net,sql,C#,.net,Sql,在我的.NET4.5 C#应用程序中,我在SQLServer2012中将90多个值插入到一行中。一些值被插入到“float”列中。但是,此“float”列的某些源值小于0。对于这些特定的列,我需要在列中插入null,或者根本不在列中插入 关于如何最好地实现这一点的任何建议 我尝试过使用带有变量类型的SqlParameter,并将值转换为“object”,但这不是最好的解决方案。一个选项是使用而不是INSERT触发器 有关示例,请参阅下面关于MSDN的文章 可以在视图或表上定义INSERT触发器
我尝试过使用带有变量类型的SqlParameter,并将值转换为“object”,但这不是最好的解决方案。一个选项是使用
而不是INSERT
触发器
有关示例,请参阅下面关于MSDN的文章
可以在视图或表上定义INSERT触发器来代替INSERT触发器
替换INSERT语句的标准操作
此触发器将在insert时触发,您的逻辑可以检测值并采取适当的操作,如在值小于0时在该字段中插入null。insert到您的表中(FloatColumn)
INSERT INTO YourTable (FloatColumn)
SELECT CASE TestValue
WHEN FloatColumn<0 THEN NULL ELSE TestValue
END
FROM SourceTable
选择casetestvalue
当FloatColumn为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 ;
}
请发布用于插入这些值的代码。能否共享用于插入的sql脚本?需要使用DBNull.Value
插入空值。设置SqlParameter
的值时,无论参数的定义类型如何,它都会采用类型object
,因此可以无缝地将其设置为浮点值或DBNull
。任务是修复插入C端的值(这样服务器就不会看到负值)或者在SQL Server端?你不需要一个端吗?这似乎真的是一种会丢失和未记录的解决方案,几年后会有人进行调试,试图找出为什么他们的负数会被悄悄删除。就像我说的,这是一个选项,或者是一个工具。如果你没有做太多的数据库开发,那么是的,你可能很难找到它。如果它是正常过程的一部分,那么您将不会有困难跟踪它。