簡體   English   中英

SQL INSERT - 列名無效

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM