检索SQL语句的输出参数

时间:2013-12-04 17:04:40

标签: c# sql sql-server ado.net output-parameter

我正在使用包含两列{@ 1}}和customer_id的表格。

customer_name是一个简单的customer_namevarchar是一个自动递增的主键。

我想使用我的C#应用​​程序插入customer_id,并检索customer_name的值。

只需使用

解决插入问题
customer_id

我找到了using (SqlConnection connection = new SqlConnection(AppConstants.ConnectionString)) { using (SqlCommand command = new SqlCommand("INSERT INTO custom_customer (customer_name) VALUES (@name);")) { command.Parameters.Add(new SqlParameter("name", customer)); connection.Open(); command.ExecuteNonQuery(); connection.Close(); } } 语句的一些文档,可用于检索值。

我认为正确的语法是

OUTPUT

我认为我需要使用

INSERT INTO custom_customer (customer_name) 
OUTPUT Inserted.customer_id 
VALUES (@name);

但后来我被困住了。我该如何从查询中获取值?

4 个答案:

答案 0 :(得分:3)

您可以使用ExecuteScalar代替

int id = (int) command.ExecuteScalar();

答案 1 :(得分:3)

首先,使用ExecuteNonQuery编写操作。执行命令后,您可以从Parameters集合中读取参数,因为您已将参数设置为输出参数,用于示例:

command.Parameters["name"].Direction = System.Data.ParameterDirection.Output;

command.ExecuteNonQuery();

object name = command.Parameters["name"].Value;

如果您想知道插入后生成的Id标识列,可以使用SCOPE_IDENTITY() sql命令,并使用ExecuteScalar()获取命令结果,以获取示例:

int id;
using (SqlConnection connection = new SqlConnection(AppConstants.ConnectionString))
{
    string sql = @"INSERT INTO custom_customer (customer_name) 
                                        VALUES (@name); 
                   SELECT SCOPE_IDENTITY();"

    using (SqlCommand command = new SqlCommand(sql))
    {
        command.Parameters.Add(new SqlParameter("name", customer));
        connection.Open();
        id = (int) command.ExecuteScalar();
        connection.Close();
    }
}

答案 2 :(得分:2)

您需要致电ExecuteScalar()以获取ID值:

int ID= (int) Command.ExecuteScalar();

答案 3 :(得分:1)

using (SqlConnection connection = new SqlConnection(AppConstants.ConnectionString))
using (SqlCommand command = new SqlCommand("INSERT INTO custom_customer (customer_name) VALUES (@name);SELECT SCOPE_IDENTITY();"))
{
    command.Parameters.Add(new SqlParameter("name", customer));
    connection.Open();
    int id= (int)Command.ExecuteScalar();
}