2017-11-07 31 views
1

로컬 데이터베이스 'database1.sdf'와 일부 값이있는 'Employees'테이블이 포함 된 코드가 있습니다. Datagridview.Datasource 속성을 사용하여 데이터베이스의 모든 행을 datagridview에 추가하고 있습니다. 모든 행이 테이블에서 가져 오는 중입니다! 벌금! 데이터베이스에서 업데이트하지 않는 datagridview에서 열 값을 업데이트하려고 할 때. 행을 삭제하고 새 행을 추가 할 때도 동일한 문제가 발생합니다. 프로그램을 실행할 때 예외가 없습니다.C# SqlCeDataAdapter는 DataGridview에서 값을 변경 한 후 Adapter.Update()를 호출 할 때 데이터베이스의 값을 업데이트하지 않습니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.SqlServerCe; 
namespace demoDatabaseOperations 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    public SqlCeConnection con = new SqlCeConnection("Data source=Database1.sdf"); 
    public DataTable dt = new DataTable(); 

    public SqlCeDataAdapter adptr; 
    public SqlCeCommandBuilder cmdBuilder; 
    private void Form1_Load(object sender, EventArgs e) 
    { 

     con.Open(); 

     if (con.State == ConnectionState.Open) 
     { 
      adptr = new SqlCeDataAdapter("select * from employees", con); 
      cmdBuilder = new SqlCeCommandBuilder(adptr); 

      adptr.UpdateCommand = cmdBuilder.GetUpdateCommand(); 

      adptr.Fill(dt); 
      this.dataGridView1.DataSource = dt; 

     } 
     } 

    //Button For Update/delete/insert values to the database 
    private void button1_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      adptr.Update(dt); 
      adptr.Dispose(); 
     } 
     catch (Exception f) { MessageBox.Show(f.ToString()); } 

    } 
} 

}

어느 하나가 이것에 대한 해결책을 가지고 있습니다?

미리 감사드립니다.

+0

adptr에 업데이트 지침이 있습니까? – BugFinder

+0

예를 들어 https://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlcedataadapter.updatecommand(v=vs.100).aspx를 참조하십시오. 코드에서 업데이트 부분을 표시하지 않았습니다. – BugFinder

+0

@BugFinder 우리는 'update tablename set column ...'과 같은 업데이트 정보를 수동으로 생성해야합니다. 또는'adptr.UpdateCommand = cmdBuilder.GetUpdateCommand();'이것은 datagridview에서 컬럼을 변경할 때 업데이트 값을위한 명령어를 자동으로 생성 할 것인가? –

답변

0

나는 무슨 일이 일어나고 있는지 알고 있습니다. 데이터베이스 파일을 프로젝트의 루트 폴더에 저장하고 프로젝트에 추가하면 프로젝트를 빌드 할 때이 파일이 디버그 폴더에 복사되고이 복사 된 파일이 앱이 업데이트하는 파일입니다.

연결 문자열에 데이터베이스 파일의 절대 경로를 넣을 수 있습니다. 데이터 원본 = C : //Database1.sdf

+0

니스! database.sdf를 최신으로 업데이트하는 중 문제가 발생했습니다! –