2011-08-22 4 views
0

는 어떤 오류가있을 수 있습니다 ...data dataadapter ..를 사용하여 sql 데이터베이스에 삽입되지 않았습니다. 여기

string constr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Inventory.mdf;Integrated Security=True;User Instance=True"; 
     SqlConnection con = new SqlConnection(constr); 
     try 
     { 
      SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Users", con); 
      DataSet ds = new DataSet(); 
      con.Open(); 
      SqlCommandBuilder cmd = new SqlCommandBuilder(sda); 
      sda.Fill(ds, "Users"); 
      DataRow row = ds.Tables["Users"].NewRow(); 
      row[0] = 2; 
      row[1] = txtUsername.Text; 
      row[2] = txtPassword.Text; 
      ds.Tables["Users"].Rows.Add(row); 
      int res=sda.Update(ds, "Users"); 
      con.Close(); 
      sda.Dispose(); 
      dgUser.ItemsSource = null; 
      dgUser.ItemsSource = ds.Tables["Users"].DefaultView; 
      ds.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      if (con.State == ConnectionState.Open) 
       con.Close(); 
      con.Dispose(); 
     } 

문제가 오류없이 실행되지만 데이터베이스에 검사 할 때 기록을 더 삽입이 없을 것입니다 코드입니다 ..?

+0

ds가 사용자의 테이블 레코드를 얻고 있는지 확인 했습니까 ?? – Syeda

+0

테이블을 사용하여 코드를 실행하려고했는데 정상적으로 작동합니다. –

+0

실제로 삽입되지는 않지만 표의 데이터를 표시 할 수 있습니다. –

답변

0

솔직히 코드에 실수가 없습니다. 중단 점을 사용하여 디버깅을 시도하고 DB에 전달되기 전에 행이 데이터 집합에 올바르게 추가되었는지 확인할 수 있습니까?

+0

그래 .. 나는 그것을 시도했다. 데이터 집합은 행과 완벽하게 추가된다. sda.update는 하나의 행에 영향을줍니다. 그러나 데이터는 테이블에 추가되지 않습니다. –

0

DataAdapter에 InsertCommand을 구성 했습니까? 그것을 설정하지 않으면 어댑터가 귀하의 레코드를 삽입하는 것을 알 것입니다.

당신이 설정 한 후

cmd ="INSERT INTO ...."; // add param to this 

sda.InsertCommand = cmd 

에 한번 업데이트 같은 것을해야합니다.

+0

그는 SqlDataAdapter의 Update 메서드를 사용하고 있습니다. 그는 Insert 또는 Update Command를 구성 할 필요가 없습니다. –

+0

@nevayeshirazi 나는 SelectCommand가 다른 용도로만 사용되는 경우에만 적용 가능하다고 생각합니다 .... – V4Vendetta

+0

당신은 맞습니다. MSND에서 보았지만 코드는 제 PC에서 잘 작동했습니다. –

1

은 선택

SqlDataAdapter sda = new SqlDataAdapter("insert into Users (ID, UserName, Password) VALUES (2," + 
     txtUsername.Text + ", " + txtPassword.Text + ")", con); 
대신 삽입을 수행하십시오 (필요한 경우 마찬가지로 어댑터의 UpdateCommand을 위해 그것을 할)

하지만 인라인 SQL은 일반적으로 나쁜 생각입니다. 저장 프로 시저를 작성하고 코드에서 실행하는 것이 더 낫습니다.

+0

나는 그것을 시도했다. cmd.ExecuteNonQuerry()는 하나의 행이 영향을 받지만 데이터는 테이블에 삽입되지 않는다. –

+0

SQL 서버 관리 스튜디오에서 같은 구문을 사용할 때 삽입 할 수 있는가? 동일한 로그인 자격 증명으로 –

관련 문제