Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于100',是否有较短的替代方案;什么是田地?_C#_Sql - Fatal编程技术网

C# 对于100',是否有较短的替代方案;什么是田地?

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

我有很多字段需要传输到SQL server数据库表中,但在
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
vs
DBNull
(对于
record.anotherField
record.yetAnotherField

当然;这实际上是一个完美的适合

基本上,dapper将(单个)参数对象视为键值存储—因为
@commRate
在命令中,所以它添加
record.commRate
,使用的规则包括
null
vs
DBNull
(对于
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);