我正在尝试将Command.Prepare
与具有单个输入参数的CommandType.Text
查询一起使用。 SELECT有几个列,我用DataReader提取。在调用Command.Prepare()
之前,是否需要将每个选择列指定为输出参数?即使我不需要指定它们,如果我这样做,性能会提高吗?
示例代码:
using(var connection = new SqlConnection("connection string")
{
connection.Open();
using(var cmd = new SqlCommand(null, Connection))
{
cmd.CommandText = "SELECT COLUMN1, COLUMN2, COLUMN3 " +
"FROM TABLE1 WHERE COLUMN4 = @thing";
cmd.Parameters.Add(new SqlParameter
{
ParameterName = "@thing",
DbType = SqlDbType.Int,
Value = 1
});
//should I add output parms for COLUMN1, COLUMN2, COLUMN3?
cmd.Prepare();
using(var reader = cmd.ExecuteReader())
{
//get stuff out of reader
}
}
}
答案 0 :(得分:1)
不,您不需要输出参数。您只需以正常方式从阅读器中获取结果。
事实上,将列作为输出参数是没有意义的,因为每列每行都有一个值,而不是整个调用的一个值。
答案 1 :(得分:0)
Linq的DataContext
提供了一种比SqlCommand
更容易使用参数的方式:
class MyRow { public string Name { get; set; } }
class Program
{
static void Main(string[] args)
{
var dataContext = new System.Data.Linq.DataContext(
"Data Source=localhost\\sqlexpress;" +
"Initial Catalog=testdb;Integrated Security=SSPI;");
var rows = dataContext.ExecuteQuery<MyRow>(
"select * from testtable where name = {0}",
"Joe");
foreach (var r in rows)
Console.WriteLine(r.Name);
}
}
虽然语法类似string.Format
,但传递给{0}
的{{1}}最终成为真正的SQL参数。