2014-01-19 2 views
0

SQLite를 구문 분석하지 않고 SQLite 데이터베이스에 TEXT를 저장하는 방법이 있습니까? SQLite 쿼리와 비슷한 TEXT를 저장할 때 어떤 이유로 구문 분석을 시도하는 문제가 있습니다. "SELECT NAME FROM sqlite_master WHERE TYPE='table' ORDER BY NAME".SQLite에 데이터 저장

내가 그런 일을 저장하려고, 그것은 말한다 : 내가 저장하기 위해 노력하고있어 "insert into tableName (Name, DateCreated, Reminder, Content) values ('name', 'currentDate', 'reminder', 'content')".

유사 텍스트 :

쿼리 나는 TEXT 저장하는 데 사용 오류 : SQL 논리 오류 또는 데이터베이스 누락 "table"부근 : 구문 오류

값 (name, currentDate, reminder, content)은 하드 코드되지 않으며 문자열로 전달됩니다. 실제 코드는 다음과 같습니다.

SQLiteCommand command = new SQLiteCommand("insert into " + cateName + " (Name, DateCreated, Reminder, Content) values ('" + noteName + "', '" + currentDate + "', '" + reminder + "', '" + content + "')", connection); 

입력 해 주셔서 감사합니다.

+1

당신이 값을 저장하는 데 사용하는 코드를 보여주십시오. 현재 귀하의 INSERT 문은 문자 리터럴에 하드 코딩되어 있습니다 ... 나는 당신이 실제로하는 일이 아니라고 확신합니다. (문제는 매개 변수가있는 SQL을 사용해야한다는 것이지만 코드를 보지 않고도 알 수 없다는 것입니다.) –

+1

이 질문을 준비 할 때 "두 번째 텍스트에 추가가 있습니다. 오타가 있습니까? – waTeim

+1

@JonSkeet, 죄송합니다. 방금 코드를 업데이트했습니다. – NetInfo

답변

2

필자가 의심 스러우면 문제는 여러분이 직접 SQL에 값을 넣고 있다는 것입니다. 그렇게하지 마십시오. 당신이보고있는 문제뿐만 아니라 SQL injection attack까지 자신을 열었습니다. 대신 매개 변수화 된 SQL을 사용하고 매개 변수 값을 지정하십시오. 예를 들어

:

// It's not clear what cateName is, but I'll assume *that* bit is valid... 
string sql = new SQLiteCommand("insert into " + cateName + 
    " (Name, DateCreated, Reminder, Content) values " + 
    "(@Name, @DateCreated, @Reminder, @Content)"); 

using (var command = new SQLiteCommand(sql, connection)) 
{ 
    command.Parameters.Add("@Name", SQLiteType.Text).Value = noteName; 
    command.Parameters.Add("@DateCreated", SQLiteType.DateTime).Value = currentDate; 
    command.Parameters.Add("@Reminder", SQLiteType.Text).Value = reminder; 
    command.Parameters.Add("@Content", SQLiteType.Text).Value = content; 
    command.ExecuteNonQuery(); 
} 
+0

답장을 보내 주셔서 감사합니다. cateName은 tableName입니다. 변수, 설명 주셔서 감사합니다, 그러나 command.Parameters.Add SQLiteType 받아 들일 수없는 DbType TEXT 또는 DateTime 포함되어 있지 않습니다. – NetInfo

+0

DbType.String을 사용하여 일종의 컨텐츠가 잘 저장됩니다. 동일한 (Paramaeterized) 메소드를 사용하여 데이터베이스에서 데이터를 검색해야합니까? 도와 주셔서 정말 감사합니다. – NetInfo

+0

@NetInfo : 예, 모든 * 동적 값에 대해 매개 변수화 된 SQL을 사용해야합니다. 그것은 모든 종류의 방식으로 도움이됩니다. –