[英]“Invalid column name” when trying to insert data into database using SQL
[英]SQL INSERT - Invalid column name
正如你們中的一些人可能從我之前的帖子中看到的,我是新手使用C#來創建網站(雖然我有很多使用它來使用Windows Forms應用程序的經驗)。 這些權力讓我遠離PHP,但我仍然在考慮基礎知識而失敗。
無論如何,這是我的問題。 我正在嘗試創建一個簡單的SQL數據庫入口。 我知道我與數據庫的連接很好,因為我可以整天關閉SELECT查詢,但是我在使用Insert方面遇到了麻煩。
繼承我的代碼:
string filename = "abc123.jpg";
SqlConnection link = new SqlConnection(//you dont need to see my data here ;));
string sqlcode = "INSERT INTO file_uploads (upload_filename VALUES ("+filename+")";
SqlCommand sql = new SqlCommand(sqlcode,link);
link.open();
sql.ExecuteNonQuery();
這導致從try / catch返回“無效的列名稱abc123.jpg”。
任何幫助,將不勝感激。 (我希望他們能讓我在PHP中執行此操作lol!)
謝謝,
Tripbrock
列名后缺少括號,值表示字符串,因此必須用引號括起來:
string sqlcode = "INSERT INTO file_uploads (upload_filename) " +
"VALUES ('"+filename+"')";
但是,正確的方法是使用參數化查詢:
string filename = "abc123.jpg";
SqlConnection link = new SqlConnection(/*you dont need to see my data here ;)*/);
string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES (@filename)";
SqlCommand sql = new SqlCommand(sqlcode,link);
sql.Parameters.AddWithValue("@filename", filename);
link.open();
sql.ExecuteNonQuery();
您的SQL格式錯誤。 嘗試這個 :
string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES ('"+filename+"')";
其中upload_filename是列的名稱
實際上,您應該對查詢進行參數化 - 這可以降低注入攻擊的風險:
string filename = "abc123.jpg";
using( SqlConnection link = new SqlConnection(/*...*/;)) )
{
// sql statement with parameter
string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES (@filename)";
using( SqlCommand sql = new SqlCommand(sqlcode,link) )
{
// add filename parameter
sql.Parameters.AddWithValue("filename", filename);
link.open();
sql.ExecuteNonQuery();
}
}
還要注意using
語句 - 這些確保處理連接和命令對象。
看起來你錯過了一個括號:
string sqlcode = "INSERT INTO file_uploads (upload_filename VALUES ("+filename+")";
應該
string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES ('"+filename+"')";
此外,為了避免SQL注入攻擊,您可以像這樣使用SQLCommand對象。
using (SQLCommand oSQLCommand = new SQLCommand("INSERT INTO file_uploads (upload_filename) VALUES ( @FileName )")
{
oSQLCommand.Parameters.AddWithValue("@FileName", filename);
oSQLCommand.ExecuteNonQuery();
}
嘗試
string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES ('"+filename+"')";
你錯過了一個結束括號。
不知道這是不是一個錯字,但該行應該是:
string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES ('"+filename+"')";
請注意upload_filename
之后的)
。
還在文件名周圍添加了單引號。
但您可能想要使用參數化查詢:
string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES (@filename)";
然后使用command.Parameters
添加實際值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.