Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用Command.Prepare和SELECT,是否需要将SELECT列指定为输出参数?_.net_Sql_Ado.net - Fatal编程技术网

.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参数