Como fazer um insert em duas tabelas distintas

Eu preciso inserir valores em tabela X, em seguida recuperar o id da mesma, para que eu possa enviar na segunda tabela Y o id de X e outros valores, porém não sei como fazer isso.

Segue o código abaixo do que estou tentando fazer sem sucesso.

class DCadastro
{
    private string _nome;
    private string _displina;

    public string Nome { get => _nome; set => _nome = value; }
    public string Displina { get => _displina; set => _displina = value; }

    public string Inserir(DCadastro dCadastro)
    {
        string resp = "";
        SqlCommand cmd = new SqlCommand();
        SqlConnection con = new SqlConnection();

        try
        {
            con.ConnectionString = Conexao.Cn;
            con.Open();
            cmd.Connection = con;

            cmd.CommandText = "INSERT INTO PROFESSOR(nome) VALUES (@nome);  SELECT SCOPE_IDENTIY(); INSERT INTO DISCIPLINA(disciplina, idProfessor) VALUES (@disciplina, @idProfessor);";
            cmd.Parameters.AddWithValue("@nome", Nome);
            Int32 idRetorno = Convert.ToInt32(cmd.ExecuteScalar());
            cmd.Parameters.AddWithValue("@disciplina", Displina);
            cmd.Parameters.AddWithValue("@idProfessor", idRetorno);
            resp = cmd.ExecuteNonQuery() == 1 ? "OK" : "Registro não foi inserido";

        }
        catch(Exception erro)
        {
            throw erro;
        }
        finally
        {
            if (con.State == System.Data.ConnectionState.Open) con.Close();
        }
        return resp;
    }
1 curtida

A lógica é assim das SQL?

string StrSql = "DECLARE @i INT;";
StrSql +="INSERT INTO Professor(Nome) VALUES(@Nome);";
StrSql +="SELECT @i = SCOPE_IDENTITY();";
StrSql +="INSERT INTO Disciplina(disciplina,idprofessor) values(@Disciplina,@i)";

Primeira linha você declara uma variável para receber o id inserido, depois o insert, depois o select para setar a variável com o id inserido e a próxima insert

Código completo:

string StrCon = "****";
string StrSql = "DECLARE @i INT;";
StrSql +="INSERT INTO Professor(Nome) VALUES (@Nome);";
StrSql +="SELECT @i = SCOPE_IDENTITY();";
StrSql +="INSERT INTO Disciplina(disciplina,idprofessor) values(@Disciplina,@i)";
using (SqlConnection connection = new SqlConnection(StrCon))
using (SqlCommand command = new SqlCommand(StrSql, connection))
{
	connection.Open();
	command.Parameters.AddWithValue("@Nome", "Teste");
	command.Parameters.AddWithValue("@Disciplina", 1);
	Console.WriteLine(command.ExecuteNonQuery());
}
1 curtida

Legal, Chegando em casa vou fazer os teste… mas desde já agradeço pela ajuda!!

1 curtida