Maf*_*Maf 6 c# vb.net lambda json dynamic
我已将一些代码从 vb.net 转换为 C#,但 lambda 存在问题。
错误 CS1977:如果不先将 lambda 表达式强制转换为委托或表达式树类型,则无法将其用作动态分派操作的参数。
这是翻译后的代码..
dynamic ds = (JArray)o["Tables"][0]["Rows"];
using(var connection = new SqlConnection(cnnString))
{connection.Open();
ds.Select(ja =>
connection.Execute("INSERT INTO dbo.AddPlay(UserId, Timestamp, YoutubeId, Source, PlayCount, Rating) " +
" VALUES(ja(0).Value<string>(), ja(1).Value<string>() ja(2).Value<string>(), ja(3).Value<string>(), GetInt(ja(4)), GetInt(ja(5)))"));
}
Run Code Online (Sandbox Code Playgroud)
使用 aforeach并创建参数化SqlCommand是最佳实践
var ds = (JArray)o["Tables"][0]["Rows"];
using (var connection = new SqlConnection(cnnString)) {
connection.Open();
var cmdIns = new SqlCommand("INSERT INTO dbo.AddPlay(UserId, Timestamp, YoutubeId, Source, PlayCount, Rating) VALUES(@UserId, @Timestamp, @YoutubeId, @Source, @PlayCount, @Rating)", connection);
cmdIns.Parameters.Add("@UserId", SqlDbType.VarChar, 20);
cmdIns.Parameters.Add("@Timestamp", SqlDbType.VarChar, 20);
cmdIns.Parameters.Add("@YoutubeId", SqlDbType.VarChar, 20);
cmdIns.Parameters.Add("@Source", SqlDbType.VarChar, 20);
cmdIns.Parameters.Add("@PlayCount", SqlDbType.Int);
cmdIns.Parameters.Add("@Rating", SqlDbType.Int);
foreach (var ja in ds) {
cmdIns.Parameters["@UserId"].Value = ja[0].Value<string>();
cmdIns.Parameters["@Timestamp"].Value = ja[1].Value<string>();
cmdIns.Parameters["@YoutubeId"].Value = ja[2].Value<string>();
cmdIns.Parameters["@Source"].Value = ja[3].Value<string>();
cmdIns.Parameters["@PlayCount"].Value = GetInt(ja[4]);
cmdIns.Parameters["@Rating"].Value = GetInt(ja[5]);
cmdIns.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud)