2014-04-01 2 views
0

두 테이블이 있습니다.SqlDataAdapter 문제

고객은 (INT 아이디, nvachar 이름 (250), INT 연령)

보너스 (INT 아이디, INT CUSTOMER_ID 참조 고객 (ID), INT의 someAmount)

나는 추가해야 고객 및 보너스에 관한 정보를 삭제, 갱신하십시오.

새 고객을 추가하면 programm가 자동으로 테이블 보너스에서이 고객에 대한 새로운 항목을 만듭니다.
고객을 삭제하면 programm는 테이블 보너스로이 고객에 대한 정보를 삭제합니다.

SQL 데이터베이스에 저장하는 데 문제가 있습니다.

//Bonus 
SqlCommand inscmdT = new SqlCommand(); 
inscmdT.CommandText = "Insert into Bonus (customer_id, someAmount) values(@customer_id, @someAmount); select id = @@IDENTITY from Bonus"; 
inscmdT.Connection = conn; 
inscmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id"); 
inscmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount"); 

SqlCommand updcmdT = new SqlCommand(); 
updcmdT.CommandText = "UPDATE Bonus SET customer_id = @customer_id, someAmount = @someAmount WHERE id = @id"; 
updcmdT.Connection = conn; 
updcmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id"); 
updcmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount"); 
updcmdT.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 

SqlCommand delcmdT = new SqlCommand(); 
delcmdT.CommandText = "DELETE FROM Bonus WHERE id = @id"; 
delcmdT.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 
delcmdT.Connection = conn; 


//Customers 

SqlCommand inscmdS = new SqlCommand(); 
inscmdS.CommandText = "Insert into Customers (SessionTime, movie, hall, age) values(@SessionTime, @age); select id = @@IDENTITY from Customers"; 
inscmdS.Connection = conn; 
inscmdS.Parameters.Add("@SessionTime", SqlDbType.NVarChar, 250, "SessionTime"); 
inscmdS.Parameters.Add("@age", SqlDbType.Int, sizeof(Int32), "age"); 

SqlCommand updcmdS = new SqlCommand(); 
updcmdS.CommandText = "UPDATE Customers SET SessionTime = @SessionTime, age = @age WHERE id = @id "; 
updcmdS.Connection = conn; 
updcmdS.Parameters.Add("@SessionTime", SqlDbType.NVarChar, 250, "SessionTime"); 
updcmdS.Parameters.Add("@age", SqlDbType.Int, sizeof(Int32), "age"); 
updcmdS.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 

SqlCommand delcmdS = new SqlCommand(); 
delcmdS.CommandText = "DELETE FROM Customers WHERE id = @id"; 
delcmdS.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id"); 
delcmdS.Connection = conn; 

어떻게 제대로 삭제, 삽입에 SqlDataAdapter를 쓰기 위해, 업데이트 :

나는이 SQL-명령이?

+0

Visual Studio를 사용하고 있습니까? – RadioSpace

답변

0

을 tediuos하지만 당신은 자신을 만들 수있다.

0

SqlDataAdapter는 선택 쿼리를 기반으로 데이터 집합을 채우는 데 사용됩니다. 그것은 당신이 찾고있는 것만은 아닙니다.

ExecuteNonQuery() 메서드를 사용하여 SqlCommand 개체를 계속 사용하려면 here을 참조하십시오. 당신이 당신의 데이터 집합을 변경 한 후

//Bonus 
SqlCommand inscmdT = new SqlCommand(); 
inscmdT.CommandText = "Insert into Bonus (customer_id, someAmount) values(@customer_id,  @someAmount); select id = @@IDENTITY from Bonus"; 
inscmdT.Connection = conn; 
inscmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id"); 
inscmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount"); 
inscmdT.ExecuteNonQuery(); 

+0

매개 변수화 된 쿼리 '(@name nvarchar (250), @ age int) Inse'는 제공되지 않은 '@name'매개 변수를 필요로합니다. – user2963950

0

호출 SqlDataAdapter.Update(dataset) :

그래서, 당신은 다음과 같습니다 코드를 가질 것이다. 적절한 명령이 설정되어있는 한. 사용자가 설정 한 어떤 이미 당신이 당신을 위해 수행되는 모든 이보다 비주얼 스튜디오와 형식화 된 데이터 집합을 만들 수 있다면 훨씬 쉽게 일을 할 것

SqlDataAdpater.DeleteCommand = delCMDT; 
SqlDataAdapter.UpdateCOmmand = updCMT; 
SQlDataAdapter.InsertCommand = incmdT 

을 할당해야합니다. 데이터베이스 스키마를 기반으로합니다. 또한 형식화 된 데이터 집합을 항상 사용하기 때문에 형식화되지 않은 데이터 집합과 함께 poarams가 어떻게 작동하는지 잘 모르겠습니다. 매우 솔루션은 캐스케이드 테이블 고객에 삭제 사용하는 것이 었습니다

SqlDataAdapter

+0

문제는 테이블을 업데이트하는 것입니다. 신규 고객을 추가 할 때 먼저 Customers 테이블을 업데이트 한 다음 Bonus 테이블을 업데이트해야합니다. 고객을 삭제할 때는 먼저 Bonus 테이블에서 항목을 삭제 한 다음 Customers 테이블에서 항목을 삭제하십시오. 잘못된 순서로 작업을 수행하는 경우 외래 키에 문제가 있습니다. – user2963950

+0

@ user2963950 - 알겠습니다. 2 개의 SqlDataAdapter가 필요합니다. Visual Studio를 사용하고 있습니까? 당신은 그것으로 데이터베이스에 연결할 수 있습니까? 이 부분을 단순화합니다. 어쨌든 dataAdapterManager와 같은 래퍼 클래스를 설정하여 업데이트 및 채우기 호출 순서를 처리합니다. – RadioSpace

관련 문제