SQL INSERT - 列名无效

时间:2011-06-22 09:50:44

标签: c# sql insert

正如你们中的一些人可能从我之前的帖子中看到的,我是新手使用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

6 个答案:

答案 0 :(得分:13)

您在列名称后缺少一个括号,并且该值表示一个字符串,因此必须用引号括起来:

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();

答案 1 :(得分:2)

您的SQL格式错误。试试这个:

string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES ('"+filename+"')";

其中upload_filename是列的名称

答案 2 :(得分:1)

你真的应该对查询进行参数化 - 这样可以降低注入攻击的风险:

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语句 - 这些语句可确保处理连接和命令对象。

答案 3 :(得分:0)

看起来你错过了一个括号:

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();
}

答案 4 :(得分:0)

尝试

string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES ('"+filename+"')";

你错过了一个结束括号。

答案 5 :(得分:0)

不知道这是不是一个错字,但该行应该是:

string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES ('"+filename+"')";

请注意)之后的upload_filename

还在文件名周围添加了单引号。

但您可能想要使用参数化查询:

string sqlcode = "INSERT INTO file_uploads (upload_filename) VALUES (@filename)";

然后使用command.Parameters添加实际值。