Bar*_*ast 3 c# sql sql-server sequence sql-server-2012
我正在试验SQL Server中的SEQUENCE对象,并通过指定序列名称来获取C#的下一个值.范围很简单,因为它们有一个存储过程,您可以传递序列名称;
public static T Reserve<T>(string name, int count, SqlConnection sqlConn)
{
using (var sqlCmd = new SqlCommand("sp_sequence_get_range", sqlConn))
{
sqlCmd.CommandType = CommandType.StoredProcedure;
var firstValueParam = new SqlParameter("@range_first_value", SqlDbType.Variant) { Direction = ParameterDirection.Output };
sqlCmd.Parameters.AddWithValue("@sequence_name", name);
sqlCmd.Parameters.AddWithValue("@range_size", count);
sqlCmd.Parameters.Add(firstValueParam);
sqlCmd.ExecuteNonQuery();
return (T)firstValueParam.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
但单值呢?在我看来,我可以调用上面的计数'1',或者我可以动态地构造SQL.即
var sqlCmdStr = string.Format("SELECT NEXT VALUE FOR {0}", name);
Run Code Online (Sandbox Code Playgroud)
我知道通常是不好的做法(即SQL注入).
有人会建议什么?
我知道通常是不好的做法(即SQL注入).
并非每个动态SQL都是邪恶的.
是否对SQL注入开放取决于值(在SQL文本中插入)的来源.如果它来自严密控制代码的地方(例如switch,从一组字符串常量中选择的语句),则SQL注入不是问题.
或者,您可以简单地为每个序列分别设置一个查询(假设您没有很多序列).
| 归档时间: |
|
| 查看次数: |
6019 次 |
| 最近记录: |