C\#조작 SQLite 데이터베이스 도움말 클래스 상세 설명
최근 WPF 가 클 라 이언 트 로 서 오프라인 작업 으로 데 이 터 를 저장 해 야 하 는데 프로젝트 에서 Sqlite 내장 형 데이터 베 이 스 를 사용 하 는 것 을 고려 하여 인터넷 에서 많은 자 료 를 찾 아 최종 적 으로 공공 도움말 류 를 정리 했다.
Sqlite 는 매우 작은 데이터베이스 로 기본적으로 관계 형 데이터베이스 조작의 대부분 기능 을 갖 추고 있 으 며 Sql 문법 도 대동소이 하 다.다음은 제 가 정리 한 도움말 코드 입 니 다.
1.SQLiteConnection 대상 을 가 져 와 데이터베이스 에 주소 가 있 으 면 됩 니 다.
/// <summary>
///
/// </summary>
/// <returns>SQLiteConnection</returns>
public static SQLiteConnection GetSQLiteConnection()
{
//Sqlite
string str = AppDomain.CurrentDomain.BaseDirectory;
var con = new SQLiteConnection("Data Source=" + str + "DataBass\\InfoServiceDbB.db");
return con;
}
2.조작 명령 인 자 를 준비 하고 SQLiteCommand 대상 을 구성 합 니 다.
/// <summary>
///
/// </summary>
/// <param name="cmd">SQLiteCommand</param>
/// <param name="conn">SQLiteConnection</param>
/// <param name="cmdText">Sql </param>
/// <param name="data"> </param>
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, Dictionary<String, String> data)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Parameters.Clear();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 30;
if (data!=null&&data.Count >= 1)
{
foreach (KeyValuePair<String, String> val in data)
{
cmd.Parameters.AddWithValue(val.Key, val.Value);
}
}
}
3.조회,DataSet 되 돌리 기
/// <summary>
/// , DataSet
/// </summary>
/// <param name="cmdText">Sql </param>
/// <param name="data"> </param>
/// <returns>DataSet</returns>
public static DataSet ExecuteDataset(string cmdText, Dictionary<string, string> data)
{
var ds = new DataSet();
using (SQLiteConnection connection = GetSQLiteConnection())
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, data);
var da = new SQLiteDataAdapter(command);
da.Fill(ds);
}
return ds;
}
4.조회,데이터 테이블 로 돌아 가기
/// <summary>
/// , DataTable
/// </summary>
/// <param name="cmdText">Sql </param>
/// <param name="data"> </param>
/// <returns>DataTable</returns>
public static DataTable ExecuteDataTable(string cmdText, Dictionary<string, string> data)
{
var dt = new DataTable();
using (SQLiteConnection connection = GetSQLiteConnection())
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, data);
SQLiteDataReader reader = command.ExecuteReader();
dt.Load(reader);
}
return dt;
}
5.데이터 한 줄 되 돌리 기 DataRow
/// <summary>
///
/// </summary>
/// <param name="cmdText">Sql </param>
/// <param name="data"> </param>
/// <returns>DataRow</returns>
public static DataRow ExecuteDataRow(string cmdText, Dictionary<string, string> data)
{
DataSet ds = ExecuteDataset(cmdText, data);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
return ds.Tables[0].Rows[0];
return null;
}
6.데이터베이스 작업 수행
/// <summary>
///
/// </summary>
/// <param name="cmdText">Sql </param>
/// <param name="data"> </param>
/// <returns> </returns>
public static int ExecuteNonQuery(string cmdText, Dictionary<string, string> data)
{
using (SQLiteConnection connection = GetSQLiteConnection())
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, data);
return command.ExecuteNonQuery();
}
}
7.SqlDataReader 대상 되 돌리 기
/// <summary>
/// SqlDataReader
/// </summary>
/// <param name="cmdText">Sql </param>
/// <param name="data"> </param>
/// <returns>SQLiteDataReader</returns>
public static SQLiteDataReader ExecuteReader(string cmdText, Dictionary<string, string> data)
{
var command = new SQLiteCommand();
SQLiteConnection connection = GetSQLiteConnection();
try
{
PrepareCommand(command, connection, cmdText, data);
SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
catch
{
connection.Close();
command.Dispose();
throw;
}
}
8.결과 가 집 중 된 첫 번 째 줄 의 첫 번 째 열 을 되 돌려 주 고 다른 줄 이나 열 을 무시 합 니 다.
/// <summary>
/// ,
/// </summary>
/// <param name="cmdText">Sql </param>
/// <param name="data"> </param>
/// <returns>object</returns>
public static object ExecuteScalar(string cmdText, Dictionary<string, string> data)
{
using (SQLiteConnection connection = GetSQLiteConnection())
{
var cmd = new SQLiteCommand();
PrepareCommand(cmd, connection, cmdText, data);
return cmd.ExecuteScalar();
}
}
9.페이지 별 조회
/// <summary>
///
/// </summary>
/// <param name="recordCount"> </param>
/// <param name="pageIndex"> </param>
/// <param name="pageSize"> </param>
/// <param name="cmdText">Sql </param>
/// <param name="countText"> Sql </param>
/// <param name="data"> </param>
/// <returns>DataSet</returns>
public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, Dictionary<string, string> data)
{
if (recordCount < 0)
recordCount = int.Parse(ExecuteScalar(countText, data).ToString());
var ds = new DataSet();
using (SQLiteConnection connection = GetSQLiteConnection())
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, data);
var da = new SQLiteDataAdapter(command);
da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
}
return ds;
}
10.데이터베이스 재 구성SQLite 데이터베이스 에서 데 이 터 를 삭제 할 때 사용 하지 않 은 디스크 공간 은 내부 의'자유 목록'에 추 가 됩 니 다.
다음 에 데 이 터 를 삽입 할 때 이 공간 은 다시 사용 할 수 있 습 니 다.디스크 공간 은 잃 어 버 리 지 않 지만 운영 체제 에 반환 되 지 않 습 니 다.
대량의 데 이 터 를 삭제 하고 데이터베이스 파일 이 차지 하 는 공간 을 줄 이려 면 VACUUM 명령 을 실행 합 니 다.VACUUM 은 데이터 베 이 스 를 처음부터 다시 구성 합 니 다.
당신 은 프로그램 에서 시간 간격 을 정 하여 데이터 베 이 스 를 재 구성 하 는 작업 을 수행 하고 공간 을 절약 할 수 있 습 니 다.
public void ResetDataBass()
{
using (SQLiteConnection conn = GetSQLiteConnection())
{
var cmd = new SQLiteCommand();
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Parameters.Clear();
cmd.Connection = conn;
cmd.CommandText = "vacuum";
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 30;
cmd.ExecuteNonQuery();
}
}
C\#관련 내용 에 관심 이 있 는 독 자 는 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,,,,,,,,,,,,,,,,,,,,,본 고 에서 말 한 것 이 여러분 의 C\#프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.