연구 중에 .NET 단위를 사용하고 있습니다. 저는 방금 막 시작했습니다. 강사와 함께 .NET에서 가장 견고한 기초를 제공하지 못했기 때문에, noobishness를 변명하십시오.C#에서 Access '07 데이터베이스에 대한 쿼리 문제
나는 아주 간단하고 일반적인 데이터베이스 기반 응용 프로그램을 만들고 있습니다. C#을 사용하고 있으며 Microsoft Access 2007 데이터베이스에 액세스하고 있습니다.
저는 커밋에 사용하는 OleDbDataAdapters를 뱉어내는 메서드로 자체 클래스에 database-ish를 넣었습니다. 쿼리를 수행하는 모든 메서드를 제공합니다.이 메서드는 주 프로그램에서 DataSet 개체를 가져옵니다.이 메서드는 데이터를 보관합니다 (db의 여러 테이블).
SQL SELECT 쿼리를 수행하는 데 사용하는 매우 일반적인 개인 메서드를 만들고이 메서드를 래핑하여 제품을 가져 오는 public 메서드를 orders.etc (일반 소매점 데이터베이스)했습니다.
일반적인 방법은 실제로 연결하기 위해 별도의 연결 방식을 사용하며, 다음과 같은 것이있다 :
private static OleDbDataAdapter GenericSelectQuery(
DataSet ds, string namedTable, String selectString)
{
OleDbCommand oleCommand = new OleDbCommand();
OleDbConnection conn = Connect();
oleCommand.CommandText = selectString;
oleCommand.Connection = conn;
oleCommand.CommandType = CommandType.Text;
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = oleCommand;
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
adapter.Fill(ds, namedTable);
return adapter;
}
랩퍼 방법 그냥 통과 다음과 같이
private static OleDbConnection Connect()
{
OleDbConnection conn = new OleDbConnection(
@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Temp\db.accdb");
return conn;
}
일반적인 방법은 주 프로그램에서받은 DataSet을 따라 명명 된 문자열은 데이터 집합의 테이블 이름이고 사용자가 원하는 쿼리를 전달합니다.
어떤 쿼리를 제공해도 상관 없습니다 (SELECT * FROM TableName과 같은 단순한 것조차도) 나는 여전히 OleDbException을 던져서 쿼리의 FROM 절에 오류가 있음을 알립니다. 방금 Access를 사용하여 쿼리를 작성했지만 아직 사용법은 없습니다. 분명히 내 코드에는 문제가있어 실제로 놀라지 않을 것입니다.
다음은 내가 사용하는 래퍼 메소드입니다.
public static OleDbDataAdapter GetOrderLines(DataSet ds)
{
OleDbDataAdapter adapter = GenericSelectQuery(
ds, "orderlines", "SELECT OrderLine.* FROM OrderLine;");
return adapter;
}
그들은 모두 동일하게 보입니다. 변경되는 SQL 일뿐입니다.
일반적으로 폐쇄를 보장하기 위해 연결을'using' 블록에 넣습니다. 너는 그들을 전혀 닫지 않는 것 같니?!? –
빠른 생각 하나 ... Access에서 db에 대해 동일한 쿼리를 실행 해 보았습니까? – TGH
@UweKeim 저는 C#에서'using '에 대해서조차 몰랐습니다. 이것이 제가 말하는 적절한 기반의 부족입니다. 이 문제에 관해서는 테이블 이름 주위에 대괄호를 넣는 것만으로도 모든 것이 수정됨을 알 수 있습니다. 모든 것이 Access 내부에서 잘 작동하므로 잘 모르겠습니다. 내가 실제로 할 수있을 때 나는 공식적으로 질문에 대답 할 것이다. 내 평판이 주어진다면 나는 6 시간 더 할 수 없다. –