C# / SQLITE 에서 SQLITE 쿼리의 이름 중에 CREATEDATE1 과 같이 영어와 숫자 같이 있을 때 문제점이 있는 것 같다.

 

쿼리문에서 날짜 범위 설정 하려할 때

 

아래와 같은 쿼리문이 있습니다.

(A.CREATETIME BETWEEN @CREATETIME1 AND @CREATETIME2 + 1)

CREATETIME2에 하루를 더하려고 하는데

 

'2' 가 붙어 있어서인지 CREATETIME2를 인식을 못하는듯 합니다.

 

지금은 CREATETIME2와 같이 영어 숫자를 조합하기 보다는 TODATE와 같은 방식으로 작성하였습니다.

 

위의 그림과 같이 Database is not open 이라는 에러가 발생했을 때의 해결 방법 입니다.

 

using (SQLiteConnection connection = new SQLiteConnection(connectionString))

아래의 코드에 connection.Open()이라는 코드를 추가해주면 됩니다.

 

즉 connection이 오픈 되지 않아 생기는 에러 입니다.

DataGridView에 데이터 삭제하는 메서드 입니다

 

삭제 시 데이터소스를 null로 변경 후

 

다시 새로운 데이터 소스를 삽입합니다.

 

그래야 삭제 시 에러 발생 안됨

 

혹은  e.Cancel = true로 설정하는데 이 항목은 테스트 안해봤음

 

#region mainDeleteButton_Click(sender, e)

		/// <summary>
		/// 삭제 버튼 클릭시 동작합니다.
		/// </summary>
		/// <param name="sender">이벤트 발생자 입니다.</param>
		/// <param name="e">이벤트 인자 입니다.</param>
		private void mainDeleteButton_Click(object sender, EventArgs e)
		{
			foreach (DataGridViewRow row in this.mainGridView.SelectedRows)
			{
				MainModel focusItem = row.DataBoundItem as MainModel;

				if(focusItem == null)
				{
					MessageBox.Show("삭제할 항목이 없습니다.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
					return;
				}
				if (MessageBox.Show("해당 항목을 삭제하시겠습니까?", "Confirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
				{
					return;
				}

				try
				{
					SetMainDataGridView(null);

					QueryHelper.DeleteItem(focusItem.ID);

					//this.sourceList.Remove(focusItem);

					SetMainDataGridView(this.sourceList);

				}
				catch (Exception exception)
				{
					MessageBox.Show(exception.ToString());
				}
				finally
				{
					SetEditMode(EditMode.Normal);

					UpdateMainControlData(focusItem);
				}

			}
		}

		#endregion

DataGridView에서 선택한 행의 객체 가져오기 입니다.

 

foreach (DataGridViewRow row in this.mainGridView.SelectedRows)
{
	MainModel item = row.DataBoundItem as MainModel;

	UpdateMainControlData(item);
}

 

+ Recent posts