2014-11-11 6 views
-1

저는 프로그래밍에 익숙하지 않고 VB.NET 및 SQL Server를 사용하여 조직 구성원을 위해 데이터베이스 응용 프로그램을 만드는 작업을 수행했습니다 . 저는 3 인의 테이블을 가지고 있습니다 : 사람, 전화 및 고용. 개인은 내가 자동 증가하도록 설정 한 기본 키를 가지고 있으며 전화 및 고용과 일대일 관계가 있습니다. 데이터를 입력 할 때 모든 사람이 전화 번호를 가지고 있지 않으며 조직의 구성원이 언젠가 실업 상태가 될 수 있으므로 전화 및 고용은 선택 사항 일 수 있습니다. 나는 데이터를 삽입하는 저장 프로 시저를 사용하고 있는데이 내 코드입니다 : 나는 응용 프로그램을 실행할 때 이제일대일 관계를 사용하여 여러 테이블에 데이터를 삽입 할 때 if 문 사용

Dim sex as Boolean 
Dim isGovt as Boolean 

sex = IIf(optMale.Checked, 1, 0) 
isGovt = IIf(optGyes.Checked,1,0) 

Dim strCon As String = "my connection" 
Dim sqlCon As SqlConnection 
sqlCon = New SqlConnection(strCon) 

Using (sqlCon) 
Dim sqlComm As New SqlCommand 
sqlComm.Connection = sqlCon 
sqlComm.CommandText = "InsertPerson" 
sqlComm.CommandType = CommandType.StoredProcedure 

sqlComm.Parameters.AddWithValue("FistName", txtFirstName.Text) 
sqlComm.Parameters.AddWithValue("MiddleName", txtMiddleName.Text) 
sqlComm.Parameters.AddWithValue("LastName", txtLastName.Text) 
sqlComm.Parameters.AddWithValue("IsMale", sex) 
sqlComm.Parameters.AddWithValue("BirthDate", dtpBirthDate.Value.Date) 
sqlComm.Parameters.AddWithValue("CivilStatus", cboCivilStatus.Text) 
sqlComm.Parameters.AddWithValue("Address", txtAddress.Text) 

/*I used a checkbox to enable or disable the textbox for telephone number*/ 
If chkTelephone.Checked = True Then 
sqlComm.Parameters.AddWithValue("TelephoneNumber", txtTelephone.Text) 
End If 

/*Here I used a radiobutton to enable or disable the objects related to a person's employment*/ 
If optEmployed.Checked = True Then 
sqlComm.Parameters.AddWithValue("Industry", cboIndustry.Text) 
sqlComm.Parameters.AddWithValue("IsGovernment", isGovt) 
sqlComm.Parameters.AddWithValue("WorkPlace", txtWorkPlace.Text) 
sqlComm.Parameters.AddWithValue("JobStatus", cboJobStatus.Text) 
sqlComm.Parameters.AddWithValue("Salary", txtSalary.Text) 

:

USE [myDatabase] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE PROCEDURE [dbo].[InsertPerson] 
@FirstName nvarchar(50), 
@MiddleName nvarchar(50), 
@LastName nvarcahr(50), 
@IsMale bit, 
@BirthDate date, 
@CivilStatus nvarchar(13), 
@Address nvarchar(100), 
@TelephoneNumber nvarchar (12), 
@Industry nvarchar(20), 
@IsGovernment bit, 
@WorkPlace nvarchar(100), 
@JobStatus nvarchar(13), 
@Salary decimal (9,2) 

AS 
declare @PersonId int 
INSERT INTO Person(FirstName, MiddleName, LastName, IsMale, BirthDate, CivilStatus, Address) VALUES (@FirstName, @MiddleName, @ LastName, @IsMale, @BirthDate, @CivilStatus, @Address) 

SELECT @PersonId = SCOPE_IDENTITY() 

/*I used IF STATEMENTS to skip INSERT code in case a person has no telephone number or unemployed*/ 

IF (@TelephoneNumber IS NOT NULL) BEGIN 
INSERT INTO Telephone(TelephonePersonId, TelephoneNumber) 
VALUES(@PersonId, @TelephoneNumber) 
END 

IF (@Industry IS NOT NULL AND @IsGovernment IS NOT NULL AND @WorkPlace IS NOT NULL AND @JobStatus IS NOT NULL AND @Salary IS NOT NULL) BEGIN 
INSERT INTO Employment(EmpId, Industry, IsGovernment, WorkPlace, JobStatus, Salary) 
VALUES(@PersonId, @Industry, @IsGovernment, @WorkPlace, @JobStatus, @Salary) 
END 

이 VB.NET을 사용하여 내가 응용 프로그램에서 사용되는 코드는 나는이 오류가 저장 버튼을 클릭합니다 :

SQLEXCEPTION이었다 처리되지 않은

절차 또는 함수 'InsertPerson는'매개 변수 '@TelephoneNumber'제공되지 않았습니다 기대하고있다.

내가 잘못 된 곳을 말해 줄 수 있습니까? 이것을 할 또 다른 방법이 있습니까? 나는 정말로 당신이 나에게 줄 수있는 어떤 도움, 링크 또는 충고에 감사 할 것입니다. 저장 프로 시저에서

답변

-1

당신은 당신이 기본값 또는 코드에서 줄 필요 TelephoneNumber를 위해이 경우 저장 프로 시저

를 실행할 때 제공하는 당신이하지 않을 매개 변수에 기본값을 할당해야 당신은 매개 변수

당신이 좋아하는 같은 저장 프로 시저를 호출 할 수 있습니다 SQL에서
CREATE PROCEDURE [dbo].[InsertPerson] 
.. 
.. 
@Address nvarchar(100), 
@TelephoneNumber nvarchar (12) = NULL 

에 대한 기본 값을 전달할 수 있습니다

exec [dbo].[InsertPerson] .. @Address='123 NY', @Industry ='test' 
아래