在我的.NET 4.5,C#应用程序中,我将90个值插入到SQL Server 2012中的一行中。其中一些值被插入到'float'列中。然而,这个'float'列的一些源值小于0.在这些特定的列上,我需要在列中插入一个空值,或者根本不插入到列中。SQL Server 2012,当值小于0时插入null
有关如何最好地完成此任务的任何建议。
我试过使用SqlParameter类型的变体,并将值转换为'对象',但这不能是最好的解决方案。
在我的.NET 4.5,C#应用程序中,我将90个值插入到SQL Server 2012中的一行中。其中一些值被插入到'float'列中。然而,这个'float'列的一些源值小于0.在这些特定的列上,我需要在列中插入一个空值,或者根本不插入到列中。SQL Server 2012,当值小于0时插入null
有关如何最好地完成此任务的任何建议。
我试过使用SqlParameter类型的变体,并将值转换为'对象',但这不能是最好的解决方案。
一个选项是使用INSTEAD OF INSERT
触发器。
有关示例,请参阅MSDN上的以下文章。
http://msdn.microsoft.com/en-us/library/ms175089(v=SQL.105).aspx
INSTEAD INSERT触发器可以在视图或表被定义为 替换INSERT语句的标准动作。
该触发器将在插入被解雇,你的逻辑可以检测值,并采取适当的措施,如无效插入到该字段,如果该值小于0
这看起来像是一种会丢失和无证的解决方案,而有些人会在几年后进行调试,试图弄清楚为什么他们的负数被无声地丢弃。 – mellamokb
就像我说过的那样,这是一种选择,或者是一种工具。如果你不做大量的db开发,那么是的,你可能会遇到麻烦。如果它是正常程序的一部分,那么你不会有麻烦追踪它。 –
小扩展方法挂的C#“单曲,而你建立参数列表为您的SQL调用浮点类型应该做你很好:
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 ;
}
请发布您用于插入这些值的代码。 – Oded
你可以请分享插入的SQL脚本? – Rikki
您需要使用'DBNull.Value'来插入空值。设置'SqlParameter'的值时,无论参数的定义类型如何,它都已经接受'object'类型,因此您可以将其无缝地设置为浮点值或'DBNull'。 – mellamokb