从这个:
我有一个带参数的静态字符串,被发送给SQL执行命令。
字符串的格式为delete 'Name' from table where x = 1 and y = 2
或select * from table where x = 1 and y = 2
。
我的问题是我需要把字符串分解成参数。
我如何打破字符串,以便我可以传递与参数的命令,以最少的工作单个函数?
我只有一个功能来修复和处理这个问题。
从这个:
protected object ExecuteScaler(string queryString)
{ OpenConnection(); }
DbCommand command = _provider.CreateCommand();
command.Connection = _connection; command.CommandText = queryString; command.CommandType = CommandType.Text; if (_useTransaction) {
command.Transaction = _transaction; }
try { returnValue = command.ExecuteScalar(); } ...
谁能给我举个例子?
当您构建这样的sql命令时:
// don't do this because of sql injection
sql = "SELECT * FROM MyTable WHERE Col2 = " + somevalue;
当你"跳出"字符串常量来放置一个值时,就是你想要使用参数占位符的地方:
// safe from sql injection
sql = "SELECT * FROM MyTable WHERE Col2 = @somevalue";
然后您可以使用Parameters集合提供@somevalue
的值。
当查询需要一些固定值时,将它们保存在字符串中可能是可以的:
// the "type" never changes for this query:
sql = "SELECT * FROM MyTable WHERE type=1 and Col2 = @somevalue";