我有一个应用程序,除其他外,将各种数据存储到数据库中.数据库可能是ORACLE或SQL Server.SQL是根据执行期间获取的配置和值动态创建的.
通过使用DbProviderFactory,我的db方法可以使用ORACLE或SQL Server,而无需为任何数据库编写自定义代码,除了一件事; 参数/绑定变量.对于ORACLE我需要使用":ParameterName"而对于SQL Server我需要使用"@ParameterName".有没有办法让这个通用?
示例代码:
public class DbOperations
{
private DbProviderFactory m_factory;
private DbConnection m_CN;
...
private void InsertToDb(ValueType[] values, ColumnType[] columns)
{
DbCommand Cmd = m_factory.CreateCommand();
Cmd.Connection = m_CN;
StringBuilder sql = new StringBuilder();
sql.Append("INSERT INTO ");
sql.Append(DestinationTable);
sql.Append(" (");
for (int i = 0; i < columns.Length; i++)
{
sql.Append(columns[i].ColumnName);
if (i < columns.Length - 1)
sql.Append(", ");
}
sql.Append(") VALUES (");
for (int i = 0; i < values.Length; i++)
{ …Run Code Online (Sandbox Code Playgroud) 如何在Windows窗体中获取应用程序路径,我使用了波纹管代码,但它说的是"找不到方法"
Application.ExecutablePath;
Application.StartupPath;
Run Code Online (Sandbox Code Playgroud)
请建议我,我缺少任何命名空间?
提前致谢
我在我的F#应用程序中使用log4net,并希望通过创建一些函数来使日志记录更加惯用F#.
对于警告,我创建了以下功能:
let log = log4net.LogManager.GetLogger("foo")
let warn format = Printf.ksprintf log.Warn format
Run Code Online (Sandbox Code Playgroud)
这很好用,我可以这样做:
warn "This is a warning"
// and
warn "The value of my string is %s" someString
Run Code Online (Sandbox Code Playgroud)
但是我想让它更通用,并且可以传入我想要的记录器.因此,我将该函数包装在另一个可以将ILog作为参数的函数中:
let getWarn (logger: log4net.ILog) =
fun format -> Printf.ksprintf logger.Warn format
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
let getWarn (logger: log4net.ILog) format =
Printf.ksprintf logger.Warn format
Run Code Online (Sandbox Code Playgroud)
当我现在使用它时:
let warn = getWarn log4net.LogManager.GetLogger("bar")
warn "This is a warning"
Run Code Online (Sandbox Code Playgroud)
这有效,但是当我这样做时:
warn "The value of my string is %s" someString
Run Code Online (Sandbox Code Playgroud)
我收到一个编译器错误说"The value is not a function …