.net 使用Command.Prepare和SELECT,是否需要将SELECT列指定为输出参数?
我正在尝试使用.net 使用Command.Prepare和SELECT,是否需要将SELECT列指定为输出参数?,.net,sql,ado.net,.net,Sql,Ado.net,我正在尝试使用命令。使用具有单个输入参数的CommandType.Text查询准备。SELECT有几个列,我正在使用DataReader提取这些列。在调用命令.Prepare()之前,是否需要将每个select列指定为输出参数?即使我不需要指定它们,如果我这样做,性能会提高吗 示例代码: using(var connection = new SqlConnection("connection string") { connection.Open(); using(var cmd
命令。使用具有单个输入参数的CommandType.Text
查询准备。SELECT有几个列,我正在使用DataReader提取这些列。在调用命令.Prepare()
之前,是否需要将每个select列指定为输出参数?即使我不需要指定它们,如果我这样做,性能会提高吗
示例代码:
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
}
}
}
不,您不需要输出参数。你只是以正常的方式从读者那里得到结果
事实上,将列作为输出参数是没有意义的,因为每行每列都有一个值,而不是整个调用只有一个值。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);
}
}
class MyRow{public string Name{get;set;}
班级计划
{
静态void Main(字符串[]参数)
{
var dataContext=new System.Data.Linq.dataContext(
“数据源=本地主机\\sqlexpress;”+
“初始目录=testdb;集成安全=SSPI;”;
var rows=dataContext.ExecuteQuery(
“从testtable中选择*,其中name={0}”,
“乔”);
foreach(行中的var r)
控制台写入线(r.Name);
}
}
尽管语法看起来像string.Format
,但传递给ExecuteQuery
的{0}
最终是一个真正的SQL参数