SQL查询中的{0}、{1}、{2}、{3}是什么?
本文关键字:是什么 查询 SQL | 更新日期: 2023-09-27 17:49:55
我想知道在下面给出的查询中{0}或{1}是什么意思
public static int EnsureObjectHasAliases(string type, int id, int programId, string[] aliasList)
{
var sb = new StringBuilder();
if(aliasList!=null)
for (int i = 0; i < aliasList.Length; i++)
{
string alias = aliasList[i];
if (NormalizeString(ref alias))
{
if (sb.Length > 0)
sb.Append(",");
sb.Append(FormatStringForSql(alias));
}
}
if (sb.Length > 0)
{
string aliases = sb.ToString();
var c = (int)GetValue("SELECT count(*) FROM {0}Alias WHERE ProgramId = {1} AND {0}Id = {2} and Alias in ({3})", type, programId, id, aliases);
if (c > 0)
return id;
if (aliasList != null)
if (aliasList.Any(alias => AddObjectAlias(type, programId, alias, id) < 0))
return -1;
}
return id;
}
我不知道这个查询是什么意思:
SELECT count(*) FROM {0}Alias WHERE ProgramId = {1} AND {0}Id = {2} and Alias in ({3})
我想知道查询中的{0} or {1} or {2} and {3}
和ALIAS
是什么。我知道它表示某个表,但怎么表示呢?
是否与String.Format()
有关?
编辑:-
我的GetValue()函数是这样的:
public static object GetValue(string sql, params object[] args)
{
return GetValue(GlobalFactories.GetLogger().GetDefaultTransaction(), sql, args);
}
public static object GetValue(SqlConnection db, string sql, params object[] args)
{
return GetValue(GlobalFactories.GetLogger().GetDefaultTransaction(), db, sql, args);
}
public static object GetValue(LogTransactionBase logTransaction,SqlConnection db, string sql, params object[] args)
{
if (string.IsNullOrEmpty(sql))
return null;
if (args != null && args.Length > 0)
sql = string.Format(sql, args);
LastQuery = sql;
var needToDispose = false;
if(db==null)
{
db = GetDB();
needToDispose = true;
}
try
{
using (var cmd = db.CreateCommand())
{
cmd.CommandText = sql;
cmd.CommandTimeout = TIME_OUT;
var v = cmd.ExecuteScalar();
if (v == DBNull.Value) v = null;
return v;
}
}catch(Exception ex)
{
logException(logTransaction,sql,ex);
throw;
}
finally
{
if (needToDispose)
db.Dispose();
}
}
是否与
String.Format()
有关?
。这些是字符串格式化占位符。GetValue
最有可能以类似于
public object GetValue(string template, params object[] args)
{
...
string sql = string.Format(template, args);
...
}
与String.Format()
有关。{0}, {1}, {2}
和{3}
替换为type, programId, id, aliases
我认为您的GetValue
方法将{x}
替换为字符串后传递的参数值。这可以通过调用string来实现。能够通过称为复合格式
string sql = string.Format(formatString, listOfParameters)
,定义为
public int GetValue(string formatString, params object[] listOfParameters)
则,如果传递的参数为
type = "CUSTOMERS"
programID = 1
id = 2
aliases = "1,2,3"
内部字符串格式返回类似
的字符串SELECT COUNT(*) FROM CUSTOMERSalias WHERE ProgramID = 1 AND CUSTOMERSID = 2 and ALIAS IN (1,2,3)
说了这么多,我应该补充说,这是一个非常不好的做法。
它依靠字符串连接来构建sql命令。
这是Sql注入的主要途径。一个非常严重的漏洞,应该不惜一切代价避免。
这些是占位符。后面以逗号分隔的字符串中的值将填充这些位置。举个例子。
{0} =类型{1} = ProgramId
等。