我正在嘗試使用SQL和C#在Access中更新數據庫記錄。使用UPDATE
查詢不斷給我一個錯誤如何更新用戶輸入範圍內的數據庫記錄?
語法錯誤(缺少操作員)在查詢表達式
所有的查詢條件爲用戶輸入。我已經嘗試了很多來源來找到答案,但我相信我的SQL語句是正確的。以下是執行我需要的任務的方法。
private void btnUpdate_Click(object sender, EventArgs e)
{
int teamYear = Convert.ToInt32(this.textBoxBegYear.Text);
int endYear = Convert.ToInt32(this.textBoxEndYear.Text);
string teamName = this.textBoxTeamName.Text;
string league = this.textBoxLeague.Text;
string conference = this.textBoxConf.Text;
string division = this.textBoxDivision.Text;
try
{
dbConn = new OleDbConnection();
dbConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
+ ch + openFileDialog1.FileName + ch;
dbConn.Open();
sql = "UPDATE " + this.comboBox1.SelectedItem.ToString()
+ " SET LeagueName = @leagueName, ConferenceName = @conferenceName,
DivisionName = @divisionName WHERE TeamName = " + this.textBoxTeamName.Text
+ " AND TeamYear BETWEEN " + this.textBoxBegYear.Text
+ " AND " + this.textBoxEndYear.Text;
dbCmd = new OleDbCommand(sql, dbConn);
for (int i = teamYear; i <= endYear; i++)
{
dbCmd.Parameters.AddWithValue("@leagueName", league);
dbCmd.Parameters.AddWithValue("@conferenceName", conference);
dbCmd.Parameters.AddWithValue("@divisionName", division);
dbCmd.ExecuteNonQuery();
}
dbCmd.Connection.Close();
dbConn.Close();
}
catch (Exception err)
{
MessageBox.Show("Error: " + err.Message.ToString());
}
}
異常的WHERE
條款要求丟失的運算符後,來自SQL語句的下半年。
任何人都可能碰巧看到我可能錯過了什麼嗎?任何幫助,將不勝感激。
這段代碼是一個安全噩夢 - 不要接受用戶輸入並直接從中形成sql語句。你很容易受到SQL注入攻擊。 – womp
你有SQL注入問題。而且我認爲你錯過了一些''圍繞this.textBoxTeamName.Text –
哦可憐的小鮑比表! https://xkcd.com/327/每個人都會忘記你( – Kritner