Blackvelvet Posted March 15, 2012 Report Share Posted March 15, 2012 Olá pessoal, mais uma vez venho pedir a vossa preciosa ajuda, á qual eu agradeço desde já. É o seguinte: Tenho um bd em SQL, em que contem 23 tabelas, todas relacionadas. A minha duvida é, como é que eu faço para inserir os parametros nelas todas? Se fosse uma só tabela eu sei que era "insert into (tabela) [(valor1]) value (@valor1)" Fiz o insert para cada uma tabela,mas o resultado foi nada vezes nada. Podem-me dizer como é que faço isso? Cumprimentos Link to comment Share on other sites More sharing options...
Caça Posted March 15, 2012 Report Share Posted March 15, 2012 Não percebi a tua duvida, queres inserir um registo em 23 tabelas de uma só vez? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 16, 2012 Author Report Share Posted March 16, 2012 Exactamente. Isso é possivel? Se sim,como? Link to comment Share on other sites More sharing options...
Caça Posted March 16, 2012 Report Share Posted March 16, 2012 Mas o registo é igual para todas? Deves criar um Trigger para fazer isso, é mais seguro. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 16, 2012 Author Report Share Posted March 16, 2012 Não. cada tabela tem um registo diferente. Exemplo: utilizador,nome da rede, que ofice usa, que SO usa..... Mas tudo isto num só form. Link to comment Share on other sites More sharing options...
Caça Posted March 16, 2012 Report Share Posted March 16, 2012 Ok, mas cada um desses campos vai para uma tabela? Não estou a perceber... Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 16, 2012 Author Report Share Posted March 16, 2012 Exacto. 1 tabela, 1 campo. Link to comment Share on other sites More sharing options...
Caça Posted March 16, 2012 Report Share Posted March 16, 2012 Então deves fazer mesmo 23 inserts separado mas com uma transacção aberta, ou então cria uma StoredProcedure na base de dados que vai fazer essa inserção toda de uma só vez. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 16, 2012 Author Report Share Posted March 16, 2012 Desculpa a minha ignorancia,mas como é que faço o StorageProcedure? Link to comment Share on other sites More sharing options...
Caça Posted March 16, 2012 Report Share Posted March 16, 2012 CREATE PROCEDURE sp_InsereRegistos ( @Utilizador NVARCHAR(25), @NomeRede NVARCHAR(25), @Office NVARCHAR(50)--, ECT. ) AS BEGIN TRAN INSERT INTO TabelaOndeGuardaUtilizador (Utilizador) VALUES (@Utilizador) INSERT INTO TabelaOndeGuardaNomeRede (NomeRede) VALUES (@NomeRede) INSERT INTO TabelaOndeGuardaOffice (Office) VALUES (@Office) --ETC. COMMIT Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 16, 2012 Author Report Share Posted March 16, 2012 Caça, Obrigado pela ajuda. Um abraço Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 20, 2012 Author Report Share Posted March 20, 2012 Ora viva mais uma vez.... ? Ja criei o Stored Procedure no sql CREATE PROCEDURE Insere_Registos ( @empresa VARCHAR(50), @nome_rede VARCHAR(100), @utilizador VARCHAR(100), @visivel_rede INT , @localizacao VARCHAR(50), @departamento VARCHAR (50), @sistema_operativo VARCHAR (10), @user_baan VARCHAR (5), @user_citrix VARCHAR (10), @user_internet VARCHAR(5), @office VARCHAR (10), @numero_office INT , @licenca_office VARCHAR (40), @dl VARCHAR (5), @observacao VARCHAR (MAX), @selo_windows VARCHAR (50), @autenticacao VARCHAR (10), @office_audit VARCHAR (20), @server_cal INT, @ex_cal INT, @sql_cal INT, @foto_seloffice IMAGE, @foto_selowin IMAGE) AS Begin TRAN insert into empresa values (@empresa ) insert into nome_rede values (@nome_rede ) insert into utilizador values (@utilizador ) insert into visivel_rede values (@visivel_rede ) insert into localizacao values (@localizacao ) insert into departamento values(@departamento ) insert into sistema_operativo values (@sistema_operativo ) insert into user_baan values (@user_baan ) insert into user_citrix values (@user_citrix ) insert into user_internet values (@user_internet ) insert into office values (@office ) insert into numero_office values (@numero_office ) insert into licenca_office values (@licenca_office ) insert into dl values (@dl ) insert into observacao values (@observacao ) insert into selo_windows values (@selo_windows ) insert into autenticacao values (@autenticacao ) insert into office_audit values (@office_audit ) insert into server_cal values (@server_cal ) insert into ex_cal values (@ex_cal ) insert into sql_cal values(@sql_cal ) insert into foto_seloffice values (@foto_seloffice ) insert into foto_selowin values (@foto_selowin ) e no evento do botão tenho o seguinte codigo (parte do codigo) ' Try ' Texto de ligação à base de dados Dim myConnectionString As String = _ "Data Source=.\SQLEXPRESS; Initial Catalog=GestInf; Integrated Security=SSPI;" ' Cria uma nova ligação à base de dados Dim connection As New SqlConnection(myConnectionString) connection.Open() ' Comando que irá inserir dados na tabela "GestInformatica" os campos 'que são passados através de parâmetros Dim command As New SqlCommand("Insere_Registos", connection) '' Indicação dos parâmetros que serão inseridos command.Connection = connection command.CommandText = "Insere_Registos" 'command.CommandType = CommandType.StoredProcedure Dim parameter As SqlParameter With parameter .ParameterName = "@empresa" .SqlDbType = SqlDbType.VarChar .Value = cbxEmpresa.Text .ParameterName = "@nome_rede" .SqlDbType = SqlDbType.Int .Value = txtNomeRede.Text End With With command .Parameters.Add(parameter) .CommandType = CommandType.StoredProcedure End With 'Executa o comando e guarda em "x" o número de registos inseridos Dim x As Integer = command.ExecuteNonQuery() If x < 1 Then End If ' Fecha a ligação e limpa as variáveis connection.Close() connection = Nothing command = Nothing MsgBox(" Registo inserido com sucesso", MsgBoxStyle.Information) ' Catch ex As Exception MessageBox.Show("A operação efectuada não retomou qualquer resultado.") 'End Try End Sub Experimentado, dá erro nesta parte do codigo: ParameterName = "@empresa" o erro é "Object reference not set to an instance of an object." o que estou a fazer de errado? EDIT: GeSHi adicionado Link to comment Share on other sites More sharing options...
Caça Posted March 21, 2012 Report Share Posted March 21, 2012 Não estás a instanciar o parâmetro, podes fazer directamente, tipo command.Parameters.Add("@empresa", SqlDbType.VarChar, cbxEmpresa.Text) command.Parameters.Add("@nome_rede", SqlDbType.Int, txtNomeRede.Text) '... Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 21, 2012 Author Report Share Posted March 21, 2012 Boas Caça. Instanciar directamente não o fiz,mas tinha alterado para: [code] command.Parameters.Add("@empresa", SqlDbType.VarChar).Value = cbxEmpresa.Text command.Parameters.Add("@nome_rede", SqlDbType.VarChar).Value = txtNomeRede.Text Mas dá-me o erro que não encontra o storedProcedure.A minha conecao é: Dim myConnectionString As String = _ "Data Source=.\SQLEXPRESS; Initial Catalog=GestInf; Integrated Security=SSPI;" Já ando nisto há quase 2 semanas Link to comment Share on other sites More sharing options...
Caça Posted March 21, 2012 Report Share Posted March 21, 2012 Mostra o teu código actual Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 21, 2012 Author Report Share Posted March 21, 2012 ' Texto de ligação à base de dados Dim myConnectionString As String = _ "Data Source=.\SQLEXPRESS; Initial Catalog=GestInf; Integrated Security=SSPI;" ' Cria uma nova ligação à base de dados Dim connection As New SqlConnection(myConnectionString) connection.Open() ' Comando que irá inserir dados na tabela "GestInformatica" os campos 'que são passados através de parâmetros Dim command As New SqlCommand("Insere_Registos", connection) '' Indicação dos parâmetros que serão inseridos command.Connection = connection command.CommandText = "Insere_Registos" command.CommandType = CommandType.StoredProcedure command.Parameters.Add("@empresa", SqlDbType.VarChar).Value = cbxEmpresa.Text command.Parameters.Add("@nome_rede", SqlDbType.VarChar).Value = txtNomeRede.Text command.Parameters.Add("@utilizador", SqlDbType.VarChar).Value = txtUtilizador.Text command.Parameters.Add("@visivel_rede", SqlDbType.Int).Value = cbxVisivel_Rede.Text command.Parameters.Add("@localizacao", SqlDbType.VarChar).Value = cbxLocalizacao.Text command.Parameters.Add("@departamento", SqlDbType.VarChar).Value = cbxDepartamento.Text command.Parameters.Add("@sistema_operativo", SqlDbType.VarChar).Value = txtSO.Text command.Parameters.Add("@user_baan", SqlDbType.VarChar).Value = cbxUserBaan.Text command.Parameters.Add("@user_citrix", SqlDbType.VarChar).Value = cbxUserCitrix.Text command.Parameters.Add("@user_internet", SqlDbType.VarChar).Value = cbxUserInternet.Text command.Parameters.Add("@office", SqlDbType.VarChar).Value = txtOffice.Text command.Parameters.Add("@numero_office", SqlDbType.Int).Value = txtNOffice.Text command.Parameters.Add("@licenca_office", SqlDbType.VarChar).Value = txtSeloOffice.Text command.Parameters.Add("@dl", SqlDbType.VarChar).Value = cbxDL.Text command.Parameters.Add("@observacao", SqlDbType.VarChar).Value = txtObservacoes.Text command.Parameters.Add("@selo_windows", SqlDbType.VarChar).Value = txtSeloWindows.Text command.Parameters.Add("@autenticacao", SqlDbType.VarChar).Value = cbxLegal.Text command.Parameters.Add("@office_audit", SqlDbType.VarChar).Value = txtOfficeAuditoria.Text command.Parameters.Add("@server_cal", SqlDbType.Int).Value = cbxServer.Text command.Parameters.Add("@ex_cal", SqlDbType.Int).Value = cbxEx.Text command.Parameters.Add("@sql_cal", SqlDbType.Int).Value = cbxSQL.Text 'Executa o comando e guarda em "x" o número de registos inseridos Dim x As Integer = command.ExecuteNonQuery() If x < 1 Then End If ' Fecha a ligação e limpa as variáveis connection.Close() connection = Nothing command = Nothing MsgBox(" Registo inserido com sucesso", MsgBoxStyle.Information) ' Catch ex As Exception MessageBox.Show("A operação efectuada não retomou qualquer resultado.") 'End Try Link to comment Share on other sites More sharing options...
Caça Posted March 21, 2012 Report Share Posted March 21, 2012 Já criaste o StoredProcedure nessa base de dados? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 21, 2012 Author Report Share Posted March 21, 2012 Já.. Aqui está ela: CREATE PROCEDURE Insere_Registos ( @empresa VARCHAR(50), @nome_rede VARCHAR(100), @utilizador VARCHAR(100), @visivel_rede INT , @localizacao VARCHAR(50), @departamento VARCHAR (50), @sistema_operativo VARCHAR (10), @user_baan VARCHAR (5), @user_citrix VARCHAR (10), @user_internet VARCHAR(5), @office VARCHAR (10), @numero_office INT , @licenca_office VARCHAR (40), @dl VARCHAR (5), @observacao VARCHAR (MAX), @selo_windows VARCHAR (50), @autenticacao VARCHAR (10), @office_audit VARCHAR (20), @server_cal INT, @ex_cal INT, @sql_cal INT, @foto_seloffice IMAGE, @foto_selowin IMAGE) AS Begin TRAN insert into empresa values (@empresa ) insert into nome_rede values (@nome_rede ) insert into utilizador values (@utilizador ) insert into visivel_rede values (@visivel_rede ) insert into localizacao values (@localizacao ) insert into departamento values(@departamento ) insert into sistema_operativo values (@sistema_operativo ) insert into user_baan values (@user_baan ) insert into user_citrix values (@user_citrix ) insert into user_internet values (@user_internet ) insert into office values (@office ) insert into numero_office values (@numero_office ) insert into licenca_office values (@licenca_office ) insert into dl values (@dl ) insert into observacao values (@observacao ) insert into selo_windows values (@selo_windows ) insert into autenticacao values (@autenticacao ) insert into office_audit values (@office_audit ) insert into server_cal values (@server_cal ) insert into ex_cal values (@ex_cal ) insert into sql_cal values(@sql_cal ) insert into foto_seloffice values (@foto_seloffice ) insert into foto_selowin values (@foto_selowin ) commit pesquisei pela net como se criava,pois o meu curso teve cortes de €€ e não queriam prolongar-se nas horas para o ensino,sendo assim,não foi falado de muita coisa. O meu prof. de vb falou-nos por alto, no commit/roolback,mas , sinceramente não sei o que isso é.... ? Daí pedir a ajuda no forum. 😉 Link to comment Share on other sites More sharing options...
Caça Posted March 21, 2012 Report Share Posted March 21, 2012 Ok, mas executas-te isso na Base de Dados? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
Blackvelvet Posted March 21, 2012 Author Report Share Posted March 21, 2012 Executar,como assim? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now