如何对数据库执行插入并使用Dapper返回插入的标识?
我尝试过这样的事情:
string sql = "DECLARE @ID int; " +
"INSERT INTO [MyTable] ([Stuff]) VALUES (@Stuff); " +
"SELECT @ID = SCOPE_IDENTITY()";
var id = connection.Query<int>(sql, new { Stuff = mystuff}).First();
Run Code Online (Sandbox Code Playgroud)
但它没有用.
@Marc Gravell谢谢你的回复.我已经尝试过你的解决方案但是,下面仍有相同的异常跟踪
System.InvalidCastException: Specified cast is not valid
at Dapper.SqlMapper.<QueryInternal>d__a`1.MoveNext() in (snip)\Dapper\SqlMapper.cs:line 610
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in (snip)\Dapper\SqlMapper.cs:line 538
at Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param) in (snip)\Dapper\SqlMapper.cs:line 456
Run Code Online (Sandbox Code Playgroud) 我必须从文本文件中插入大约200万行.
插入时我必须创建一些主表.
将如此大量的数据插入SQL Server的最佳和快速方法是什么?
我有以下代码:
static void Main(string[] args){
string sql= "SELECT * FROM Posts WHERE 1=1 ";
SqlParameter[] @params= SetDynamicParameter(ref sql, "Param=Value", "Param2=Value2", "ParamN=ValueN");
IDbConnection connection = new SqlConnection(connectionString);
IEnumerable<Posts> en = connection.Query<Posts>(sql,param:@params);
Console.ReadKey(true);
}
static SqlParameter[] SetDynamicParameter(ref string sql,params string[] sarr) {
string condition = string.Empty;
List<SqlParameter> list = new List<SqlParameter>();
foreach (var item in sarr)
{
condition += " AND "+item.Split('=')[0] + "=@" + item.Split('=')[0];
list.Add(new SqlParameter("@" + item.Split('=')[0], item.Split('=')[1]));
}
sql += condition;
return list.ToArray() ;
}
Run Code Online (Sandbox Code Playgroud)
输出错误:在此上下文中不允许使用可枚举的参数序列(数组,列表等).
它怎么样?有同等的解决方案吗?