6

我正在使用一个有两列的表格,customer_id并且customer_name.

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

我想使用我的 C# 应用程序插入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);

我想我需要使用

command.ExecuteReader();

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

4

4 回答 4

4

您可以ExecuteScalar 改用

int id = (int) command.ExecuteScalar();
于 2013-12-04T17:07:45.287 回答
3

首先,使用ExecuteNonQueryto write 操作。执行命令后,您可以从集合中读取参数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();
    }
}
于 2013-12-04T17:08:16.390 回答
2

您需要调用ExecuteScalar()以获取ID值:

int ID= (int) Command.ExecuteScalar();
于 2013-12-04T17:08:09.833 回答
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();
}
于 2013-12-04T17:18:22.803 回答