c#如何返回插入行的ID值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#如何返回插入行的ID值相关的知识,希望对你有一定的参考价值。
数据库data中表person中有id(主键,自动生成),age,name字段,现插入数据,返回插入数据的Id值,而不是返回影响的行数,以下代码返回的是影响的行数,如何修改可以返回插入数据当前行的id值,谢谢!
string str = "Data Source=.;Initial Catalog=data;Integrated Security=True";
SqlConnection conn = new SqlConnection(str);
string sql = "insert into person (Age,Name) output inserted.Id values(20,'name')";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
int i=cmd.ExecuteNonQuery();
conn.close();
MessageBox.Show(i.ToString());
SELECT IDENT_CURRENT\\这个是返回全局ID值,就是如果有多个用户插入数据,它会返回最后一个自增的ID,
按你的需求,应该用SELECT SCOPE_IDENTITY() 参考技术A int i=cmd.ExecuteNonQuery();
//改为 int i = cmd.ExecuteScalar() 参考技术B int i 要为id值是吗?
ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列。
ExecuteNonQuery 执行SQL语句并返回受影响的行数
ExecuteReader 执行返回数据集的SELECT语句
你这里是第二种,当然是反回受影响的行数啦!
如果要ID值的,那就需要写一个查询的sql语句:select id from person where name='name'
然后用ExecuteScalar执行查询,返回的自然是id本回答被提问者采纳
如何在从数据库中选择时使用选择值进行 c# 插入
【中文标题】如何在从数据库中选择时使用选择值进行 c# 插入【英文标题】:how to do a c# insert with a select values in a select from database 【发布时间】:2021-12-02 05:29:13 【问题描述】:我正在尝试让我的选择值进入我的插入但我不知道如何制作这个循环。目前,我的选择返回超过 1 个值。但他只插入第一个。有人可以帮我解决这个循环吗???
string cs = @"Data Source=xxxx";
SqlConnection cn = new SqlConnection(cs);
cn.Open();
Console.WriteLine("established connection");
string query = @"SELECT a.idfaturamento,
a.id_capa,
a.pagamentodata,
a.mensal,
b.id_status
FROM capas_faturamentos AS a
INNER JOIN capas AS b
ON a.id_capa = b.id_capa
WHERE b.id_status = 4
AND a.mensal = 1
AND Month(a.pagamentodata) != Month(Getdate()) ";
SqlCommand cmd1 = new SqlCommand(query, cn);
SqlDataReader r = cmd1.ExecuteReader();
DateTime pagamentoData = DateTime.Today;
int id_Capa = 0;
bool temFaturamentoMensal = false;
while (r.Read() == true)
int idFaturamento = r.GetInt32(0);
id_Capa = r.GetInt32(1);
pagamentoData = r.GetDateTime(2);
Console.WriteLine("ID FATURAMENTO: 0\t ID CAPA:1\t DATA:2\t",
idFaturamento, id_Capa, pagamentoData);
temFaturamentoMensal = true;
cn.Close();
Console.WriteLine("___________________");
cn.Open();
if (temFaturamentoMensal)
string query2 = @"insert into capas_faturamentos values ('"+ id_Capa +"','" + pagamentoData.ToString("yyyy/MM/dd") + "', '" + pagamentoData.ToString("yyyy/MM/dd") + "', '" + pagamentoData.ToString("yyyy/MM/dd") + "', '" + pagamentoData.ToString("yyyy/MM/dd") + "', '" + pagamentoData.ToString("yyyy/MM/dd") + "', '" + pagamentoData.ToString("yyyy/MM/dd") + "','0','0','0','0','0','0', NULL, NULL, NULL, NULL, NULL, NULL, '1')";
Console.WriteLine(query2);
SqlCommand cmd = new SqlCommand(query2, cn);
int result = cmd.ExecuteNonQuery();
Console.WriteLine(result + " record/s insert in table capas_faturamentos");
cn.Close();```
I need help creating this loop.
【问题讨论】:
使用计数ID然后插入循环内AND Month(a.pagamentodata) != Month(Getdate())
明年 10 月,您(或其他人)可能会因为它发生出乎意料的事情而感到不快。
【参考方案1】:
对于您的插入,您不需要循环
只运行
insert into capas_faturamentos
SELECT
a.id_capa,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
'0','0','0','0','0','0', NULL, NULL, NULL, NULL, NULL, NULL, '1'
FROM capas_faturamentos AS a
INNER JOIN capas AS b
ON a.id_capa = b.id_capa
WHERE b.id_status = 4
AND a.mensal = 1
AND Month(a.pagamentodata) != Month(Getdate())
如果您想完全使用循环,请使用准备好的语句,如How do multi rows insert with MySqlCommand and prepare statement?(#C)
【讨论】:
【参考方案2】:你不需要任何循环。将所有内容放在一个 sql 脚本中
string query = @"
insert into capas_faturamentos
SELECT a.idfaturamento,
a.id_capa,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
a.pagamentodata,
'0','0','0','0','0','0', NULL, NULL, NULL, NULL, NULL, NULL, '1'
FROM capas_faturamentos AS a
INNER JOIN capas AS b
ON a.id_capa = b.id_capa
WHERE b.id_status = 4
AND a.mensal = 1
AND Month(a.pagamentodata) != Month(Getdate()) ";
和代码
string cs = @"Data Source=xxxx";
var myConnection = new MySqlConnection(cs);
MySqlCommand myCommand = new MySqlCommand(query, myConnection);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
【讨论】:
以上是关于c#如何返回插入行的ID值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Prepared Statement,我如何返回插入行的 id?
Dapper for NET Core:插入表并返回插入行的 id