2

我正在尝试将文本框值插入数据库。但是我被提示“关键字'table'附近的语法不正确”错误“cmd.ExecuteNonQuery();” 我的代码有什么问题?

下面是我的代码:

string query;
string str = "Data Source=blank blank blank;Initial Catalog=test;User ID=hello;Password=password";
SqlConnection con = new SqlConnection(str);
con.Open();
query = "INSERT INTO table dbo.url_map Values ('" + tbLongURL.Text + "')";
SqlCommand cmd = new SqlCommand(query, con);
cmd.ExecuteNonQuery();
con.Close();
4

3 回答 3

6

正确的语法是

query = "INSERT INTO dbo.url_map Values ('" + tbLongURL.Text + "')";

基本上,您将“表”一词添加到不是 SQL 语法的查询中。这是

INSERT INTO tablename

于 2013-06-26T01:49:22.607 回答
3

您没有转义文本,这不仅会破坏您的 SQL 查询,而且如果输入未经过清理,您还容易受到 SQL 注入的攻击。你应该做什么:

string query;
string str = "Data Source=blank blank blank;Initial Catalog=test;User ID=hello;Password=password";
SqlConnection con = new SqlConnection(str);
con.Open();
query = "INSERT INTO dbo.url_map Values (@Url)";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@Url", tbLongURL.Text);
cmd.ExecuteNonQuery();
con.Close(); 
于 2013-06-26T01:49:46.913 回答
2

dbo.url_map表中只有一列?如果此表有其他列,您可以尝试此查询

INSERT INTO dbo.url_map(login) VALUES('" + tbLogonURL.Text + "')";

因为当您没有指定要插入的列日期时,您的数据库将尝试为表的所有列获取日期,如果您有列id、logon 和 pass,它将不能为 id 和 pass 获取日期,这可能会导致错误为您的插入。

于 2013-06-26T02:52:01.730 回答