SQL语句不能在特定的表上工作

本文关键字:工作 语句 不能 SQL | 更新日期: 2023-09-27 18:18:57

我有一个创建新订单并将购物袋项目保存到数据库的网站。事情是插入,选择,更新,删除句子在我所有的表工作,除了一个,我认为我写的句子完美,但它仍然抛出异常,说一些错误的句子。

string OrderSql = string.Format(@"
    INSERT INTO Order ([UserID],[DayMonthYear],[PriceToPay],[StatusID],[AdressToSend]) 
    VALUES ({0},{1},{2},{3},'{4}')",
 UserId, DateTime.Now, Price, 1, Address);

起初我认为问题可能是在数据库中发现的,所以我把我的数据库复制到新的一次仍然不工作我将发送表之间的关系,但我需要10个rep.

SQL语句不能在特定的表上工作

看起来你有两个问题。首先,正如@juergen在评论中指出的那样,order是一个保留词,因此您需要将其括在方括号中。其次,你没有把日期用引号括起来。所以你的代码应该是:

string OrderSql = string.Format(@"INSERT INTO [Order] ([UserID],[DayMonthYear],[PriceToPay],[StatusID],[AdressToSend]) 
VALUES ({0},'{1}',{2},{3},'{4}')", UserId, DateTime.Now, Price, 1, Address);

注意Order周围的方括号和{1}周围的单引号。

然而,你是开放的SQL注入攻击使用该代码,所以我强烈建议你阅读使用参数化查询。@DJ KRAZE在评论中为这个问题添加了一个链接,它应该会给你指明正确的方向。

你也可以创建一个方法来调用它并做一些类似的事情。这需要你用这个例子中的@Parameters创建一个存储过程**如果这是Access,那么petelids Answer将是一个很好的起点如果这是SQL Server,那么我所发布的内容将为你工作

private void InsertMyData(string UserId, DateTime DayMonthYear, double Price, string Address)
{ 
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand cmd = new SqlCommand("INSERT INTO [Order] ([UserID],[DayMonthYear],[PriceToPay],[StatusID],[AdressToSend]) 
                                         VALUES (@UserId, @DayMonthYear, @Price, 1, @Address)";
        cmd.CommandType = CommandType.Text;
        cmd.Connection = connection;
        cmd.Parameters.AddWithValue("@UserId", UserId);
        cmd.Parameters.AddWithValue("@DayMonthYear", DayMonthYear);
        cmd.Parameters.AddWithValue("@PriceToPay", Price);
        cmd.Parameters.AddWithValue("@StatusID", 1);
        cmd.Parameters.AddWithValue("@AdressToSend", Adress);
        connection.Open();
        cmd.ExecuteNonQuery();
    }
}