0
データベースに簡単にアクセスできるmssql-context-classがあります。またc#genereic sql context patameter
var context = MsSqlContext.CreateFrom("some_connectionstring");
context.Insert("myTable", parameters => {
parameters.AddWithValue("foo_1", "bar_1");
parameters.AddWithValue("foo_2", "bar_2");
});
今私がいることができ、汎用のSQLコンテキスト・クラスを構築したい:次のようになり、これを呼び出す
public int? Insert(string tableName, Action<SqlParameterCollection> actionSqlParameterCollection)
{
using (var sqlConnection = new SqlConnection(ConnectionString))
{
sqlConnection.Open();
using (var sqlCommand = sqlConnection.CreateCommand())
{
var commandText = $"insert into {tableName} (@columns) output inserted.id values (@values)";
var valueBuilder = new StringBuilder();
var columnBuilder = new StringBuilder();
actionSqlParameterCollection?.Invoke(sqlCommand.Parameters); //Fill the parameters from outside with some values
foreach (SqlParameter parameter in sqlCommand.Parameters)
{
valueBuilder.Append($",@{parameter.ParameterName}");
columnBuilder.Append($",{parameter.ParameterName}");
}
commandText = commandText.Replace("@values", valueBuilder.ToString().Substring(1));
commandText = commandText.Replace("@columns", columnBuilder.ToString().Substring(1));
sqlCommand.CommandText = commandText;
object result = sqlCommand.ExecuteScalar();
return (int?)result;
}
}
}
:それはこのようになりますよう、データローを挿入するための機能が含まれていますmysql-databasesを処理します。
var context = SqlContext.CreateFrom(SqlProvider.MySql, "Server=localhost;Database=4713_demo;Uid=root;Pwd=;");
context.Insert("my_table", parameters =>
{
parameters.Add(?); //It expects an object
});
私の問題は
context.Insert("my_table", parameters =>
{
parameters.Add(context.CreateParameter("foo","bar"));
});
ような何かをしたくない、である:私は、それはこのようになります関数を呼び出すしようとすると
public int? Insert(string tableName, Action<IDataParameterCollection> actionParameterCollection)
{
using (var connection = this.CreateConnection())
{
using (var command = connection.CreateCommand())
{
var commandText = $"insert into {tableName} (@field) values (@values)";
var valueBuilder = new StringBuilder();
var columnBuilder = new StringBuilder();
actionParameterCollection?.Invoke(command.Parameters);
foreach (IDbDataParameter parameter in command.Parameters)
{
valueBuilder.Append($",@{parameter.ParameterName}");
columnBuilder.Append($",{parameter.ParameterName}");
}
commandText = commandText.Replace("@values", valueBuilder.ToString().Substring(1));
commandText = commandText.Replace("@columns", columnBuilder.ToString().Substring(1));
command.CommandText = commandText;
object result = command.ExecuteScalar();
return (int?)result;
}
}
}
:挿入機能は、これまでのところ、このようになります。
パラメータ名とパラメータ値を渡したいだけです。コンテキストクラス自体がプロバイダを認識しており、パラメータを作成する必要があります。それを買う方法は?
あなたがそれを望んでいないのはなぜ? "parameters.Add(context.CreateParameter(" foo "、" bar "));" – lucky