나는 조금 둘러 보았다했지만 답변의 대부분은 나는 현재에서 약간의 도움을 얻었다 코드 블록의이 비트를 사용하고 "Select count(*) from MyTable where id = 1"
C# 많은 데이터를 MS Access 데이터베이스에 삽입하기 전에 레코드가 존재하는지 어떻게 확인합니까?
처럼 인터페이스 할 수없는 SQL 저장 프로 시저, 또는 미리 정해진 값에 해당하는 다른 질문. 보시다시피 Access 데이터베이스가 전체적으로 삽입됩니다. 고유 한 ID라는 테이블에 다른 열을 추가한다고 가정하고, 이미 삽입되었는지 여부를 어떻게 확인할 수 있습니까?
using (OleDbConnection conn = new OleDbConnection(Con))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
conn.Open();
for (int i = 0; i <= DGVExcel.Rows.Count - 1; i++)
{
cmd.CommandText =
"Insert INTO ACTB (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) " +
"VALUES(@First, @Last, @Gross, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)";
//cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txtID.Text));
cmd.Parameters.AddWithValue("@First", DGVExcel.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@Last", DGVExcel.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@Gross", Convert.ToDouble(DGVExcel.Rows[i].Cells[2].Value));
cmd.Parameters.AddWithValue("@LessTNT",
Convert.ToDouble(DGVExcel.Rows[i].Cells[3].Value));
cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(DGVExcel.Rows[i].Cells[4].Value));
cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[5].Value));
cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[6].Value));
cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(DGVExcel.Rows[i].Cells[7].Value));
cmd.Parameters.AddWithValue("@LessPPH",
Convert.ToDouble(DGVExcel.Rows[i].Cells[8].Value));
cmd.Parameters.AddWithValue("@LessNTI",
Convert.ToDouble(DGVExcel.Rows[i].Cells[9].Value));
cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(DGVExcel.Rows[i].Cells[10].Value));
cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(DGVExcel.Rows[i].Cells[11].Value));
cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(DGVExcel.Rows[i].Cells[12].Value));
cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(DGVExcel.Rows[i].Cells[13].Value));
cmd.ExecuteNonQuery();
}
}
는 여기에 지금까지 최대 무슨 생각 :
cmd = ("If not exists(Select*from ACTB where ID = @ID....
내가 값을 미리 결정할 수 없습니다 잊어 빌어 먹을 아. 어떻게 든 Datagridview에서 끌어 와야합니다. 행 수가 많기 때문에 단순히 DGV.Rows [i] .Cells [1]을 지정할 수 없습니다. 맞습니까?
EDIT : Datagridview와 비슷한 필드가있는 경우 명시 적으로 알 필요가있는 게시물을 암시하지 못했습니다. 그 이유는 별도의 함수에서 DB의 원래 값을 추가하기 때문입니다. 중복은 없지만 값은 업데이트됩니다. Employee1이 10000 명의 급여를 가지고있는 것처럼, 테이블은 복제본을보고 필드의 일치하는 DB의 원본에 버전 급여를 추가합니다.
Db가 고유 필드에 중복 값을 추가하지 않는다고 생각하지 않습니다. 예외가 발생합니다. – Prajwal
실 거예요? 흠, 글쎄, 이전에 생각한 아이디어를 구현하지 못했지만 @Prajwal이라는 질문이 있습니다. 전체 DataGridView의 내용을 데이터베이스에 추가하기 때문에이 예외가 발생하면 전체 쿼리가 중단됩니다. 이상적으로는 예외가있는 필드를 제외하고 해당 필드를 삽입합니다. 게시물에 암시하지 않은 또 다른 시나리오는 Datagridview에서 DB에 비슷한 필드가 있는지 명시 적으로 알고 데이터베이스의 원래 값을 추가해야합니다. – Aroueterra
다른 검색어를 사용하여 언제든지 확인할 수 있습니다. 고유 ID를 사용하여 항목을 선택하고 0 행을 반환하면 해당 벌금. 그렇지 않으면 추가하지 마십시오. – Prajwal