我有很多字段需要传输到SQL服务器数据库表,我在NULL
值时出现了一些问题。
我可以使用与
类似的东西绕过它using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd_insert = new SqlCommand("INSERT INTO AccStats (Field1 , Field2 ,
Field3) VALUES (@value1 , @value2 , @value3)", conn);
if (record.commRate == null)
{
cmd_insert.Parameters.AddWithValue("@value1", DBNull.Value);
}
else
{
cmd_insert.Parameters.AddWithValue("@value1", record.commRate);
}
//Lots more fields
conn.Open();
cmd_insert.ExecuteNonQuery();
conn.Close();
}
我只是想知道是否有更简洁/更短的方式来做这件事,而不是写出所有领域的100次?
if (record.commRate == null)
{
cmd_insert.Parameters.AddWithValue("@value1", DBNull.Value);
}
else
{
cmd_insert.Parameters.AddWithValue("@value1", record.commRate);
}
答案 0 :(得分:4)
不确定;这实际上非常适合dapper
conn.Execute(
"INSERT INTO AccStats (Field1,Field2,Field3) VALUES (@commRate,@anotherField,@yetAnotherField)",
record);
基本上,dapper将(单个)参数对象视为键值存储 - 因为@commRate
在命令中,它使用包含record.commRate
vs的使用规则添加null
DBNull
(同样适用于record.anotherField
和record.yetAnotherField
)。
答案 1 :(得分:2)
编写一个将返回DBNull.Value
或实际值的函数:
private object DBNullOrValue<T>(T val) where T : class
{
if(val == null)
return DBNull.Value;
return val;
}
答案 2 :(得分:1)
选择您喜欢的:
1)
cmd_insert.Parameters.AddWithValue("@value1", record.commRate ?? DBNull.Value);
2)
public static object NullToDBNull(this object val)
{
return val ?? DBNull.Value;
}
cmd_insert.Parameters.AddWithValue("@value1", record.commRate.NullToDBNull());
3)
public static void AddNullable(this SqlParameterCollection parameters,
string paramName, object newParameter)
{
parameters.AddWithValue(paramName, newParameter ?? DBNull.Value);
}
cmd_insert.Parameters.AddNullable("@value1", record.commRate);
答案 3 :(得分:0)
尝试使用Sql server批量复制。
示例:
string connectionString = GetConnectionString();
using (var connection = new SqlConnection(connectionString))
{
using (connection)
{
connection.Open();
// Create a table with some rows.
using (var newSessionResults = MakeTable(results))
{
using (var bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "tablename";
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(newSessionResults);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
throw;
}
}
}
}
}