C# 对于100',是否有较短的替代方案;什么是田地?
我有很多字段需要传输到SQL server数据库表中,但在C# 对于100',是否有较短的替代方案;什么是田地?,c#,sql,C#,Sql,我有很多字段需要传输到SQL server数据库表中,但在NULL值方面遇到了一些问题 我可以用类似于 using (SqlConnection conn = new SqlConnection(connectionString)) { SqlCommand cmd_insert = new SqlCommand("INSERT INTO AccStats (Field1 , Field2 , Field3) VALUES (@value1 , @value2 , @value
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);
}
编写一个函数,返回
DBNull.Value
或实际值:
private object DBNullOrValue<T>(T val) where T : class
{
if(val == null)
return DBNull.Value;
return val;
}
私有对象DBNullOrValue(T val),其中T:class
{
if(val==null)
返回DBNull.Value;
返回val;
}
编写一个函数,返回DBNull.Value
或实际值:
private object DBNullOrValue<T>(T val) where T : class
{
if(val == null)
return DBNull.Value;
return val;
}
私有对象DBNullOrValue(T val),其中T:class
{
if(val==null)
返回DBNull.Value;
返回val;
}
当然;这实际上是一个完美的适合
基本上,dapper将(单个)参数对象视为键值存储—因为
@commRate
在命令中,所以它添加record.commRate
,使用的规则包括null
vsDBNull
(对于record.anotherField
和record.yetAnotherField
) 当然;这实际上是一个完美的适合
基本上,dapper将(单个)参数对象视为键值存储—因为@commRate
在命令中,所以它添加record.commRate
,使用的规则包括null
vsDBNull
(对于record.anotherField
和record.yetAnotherField
) 选择您最喜欢的:
(一)
(二)
(三)
选择您最喜欢的:
(一)
(二)
(三)
尝试使用Sql server批量复制 例如:
string connectionString=GetConnectionString();
使用(var连接=新的SqlConnection(connectionString))
{
使用(连接)
{
connection.Open();
//创建一个包含一些行的表。
使用(var newSessionResults=MakeTable(results))
{
使用(var-bulkCopy=new-SqlBulkCopy(连接))
{
bulkCopy.DestinationTableName=“tablename”;
尝试
{
//从源写入目标。
bulkCopy.WriteToServer(newSessionResults);
}
捕获(例外情况除外)
{
Debug.WriteLine(例如消息);
投掷;
}
}
}
}
}
尝试使用Sql server批量复制
例如:
string connectionString=GetConnectionString();
使用(var连接=新的SqlConnection(connectionString))
{
使用(连接)
{
connection.Open();
//创建一个包含一些行的表。
使用(var newSessionResults=MakeTable(results))
{
使用(var-bulkCopy=new-SqlBulkCopy(连接))
{
bulkCopy.DestinationTableName=“tablename”;
尝试
{
//从源写入目标。
bulkCopy.WriteToServer(newSessionResults);
}
捕获(例外情况除外)
{
Debug.WriteLine(例如消息);
投掷;
}
}
}
}
}
拥有数百个字段肯定很奇怪(读坏设计)。您的字段是否有名称,或者它们是否像您的示例中那样编号?谢天谢地,“数百个字段”并不是全部放在一个表中。我还将字段名更改为非常普通的名称-它们在现实生活中有更好的描述!拥有数百个字段肯定很奇怪(读坏设计)。您的字段是否有名称,或者它们是否像您的示例中那样编号?谢天谢地,“数百个字段”并不是全部放在一个表中。我还将字段名更改为非常普通的名称-它们在现实生活中有更好的描述!我们不能简单地执行cmd_insert.Parameters.AddWithValue(“value1”,record.commRate??DbNull.Value)吗@当然可以。有很多方法可以做到这一点。我们不能简单地执行cmd_insert.Parameters.AddWithValue(“value1”,record.commRate??DbNull.Value)@当然可以。有很多方法可以做到这一点。当然——虽然我相信我真的需要很好地了解它的内部结构才能有效地使用dapper。当然——尽管我相信我真的需要很好地了解它的内部结构才能有效地使用dapper。
cmd_insert.Parameters.AddWithValue("@value1", record.commRate ?? DBNull.Value);
public static object NullToDBNull(this object val)
{
return val ?? DBNull.Value;
}
cmd_insert.Parameters.AddWithValue("@value1", record.commRate.NullToDBNull());
public static void AddNullable(this SqlParameterCollection parameters,
string paramName, object newParameter)
{
parameters.AddWithValue(paramName, newParameter ?? DBNull.Value);
}
cmd_insert.Parameters.AddNullable("@value1", record.commRate);