2010-11-24 5 views
1

간단한 데이터베이스 관련 응용 프로그램을 개발 중입니다. GUI는 데이터 그리드 뷰와 "저장"버튼으로 구성됩니다. DataGridview는 데이터 세트를 소스로 사용합니다. SQL Server Compact Edition 데이터베이스 파일에서 데이터를 가져 와서 데이터 집합을 채 웁니다.DataGridview의 내용을 데이터베이스에 저장하는 데 문제가 있습니다.

문제는 내가 datagridview를 사용하여 데이터베이스의 내용을 변경 한 다음 변경을 진행할 때입니다.

SqlCeDataAdapter da = new SqlCeDataAdapter(); 
da.UpdateCommand = Con.CreateCommand(); // Con is SqlCeCommand object 
da.UpdateCommand.CommandText = "update TempTable set " + 
"S.No = @S.No , Name = @Name"; 

this.AddParams(da.UpdateCommand, "S.No", "Name"); 
da.Update(ds); // ds is the dataset used as source by the datagridview 

및 AddParams 방법

...

private void AddParams(SqlCeCommand cmd, params string[] cols) 
     { 
      foreach (string col in cols) 
      { 
       cmd.Parameters.Add("@" + col, SqlDbType.Char, 0, col); 
      } 
     } 

문제는 내가 생각

cmd.Parameters.Add("@" + col, SqlDbType.Char, 0, col); 

이 때문이다 다음 줄에 "문자"로 설명이있는 ArguementException을 얻고있다 매개 변수 중 하나가 varchar이고 다른 하나는 정수인 사실입니다. 그래서 어떻게 끝내야합니까?

p.s. 나는 초보자 닷넷 & 프로그래밍.

+0

더 많은 정보를 원하시면 reffer 가치

,

크기를 제공하거나 단지 @paraname? 파서가 그것과 함께 올라가고 cmd.Parameters.Add의'@'는 선택 사항입니다. 크기 (0)를 정의하지 않으면 –

답변

0

문제를 일으키는 그 단지 유형이 같은 각 열에 대한 개별 유형을 정의 할 수 있다면 :

Dictionary<string, SqlDbType> columnDefinition = new Dictionary<string, SqlDbType>() 
{ 
    { "S.No", SqlDbType.YourType }, 
    { "Name", SqlDbType.OtherType } 
}; 

private void AddParams(SqlCeCommand cmd, params string[] cols) 
{ 
    foreach(string col in cols) 
    { 
     cmd.Parameters.Add("@" + col, columnDefinition[ col ], 0, col); 
    } 
} 
관련 문제