尝试将值插入数据库并获取最后插入的ID时出错

 CJFONe 发布于 2023-02-07 19:54

我正在使用C#在ASP.net中进行Web开发.

我试图将一些值插入数据库并获取最后插入的ID.

这是我的代码:

int  userno2 =  Convert.ToInt32(Session["user_id"].ToString());
con = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ConnectionString);

createorder = new SqlDataAdapter("INSERT INTO order (user_id, date) VALUES ('" + userno2 + "', '12-12-2013');select SCOPE_IDENTITY();", con);
order = new DataSet();
createorder.Fill(order, "or_det");

Int32 ord_id = Convert.ToInt32(order.Tables[0].Rows[0]["order_id"].ToString());

当我尝试执行程序时,它会出错

关键字"order"附近的语法不正确.

有人可以帮我解决这个错误吗?

2 个回答
  • ORDER 是T-SQL中的保留关键字.

    要么不调用你的表ORDER,要么你需要用方括号"转义"名称:

    INSERT INTO [order](user_id, date) VALUES ('" + userno2 + "', '12-12-2013');select SCOPE_IDENTITY();", con);
    

    另外:不要像这样把你的SQL语句串在一起!这非常容易受到 SQL注入攻击!

    请改用参数化查询!

    INSERT INTO [order](user_id, date) VALUES (@UserId, @Date);
    SELECT SCOPE_IDENTITY();
    

    要只插入行并检索新插入的ID,我个人使用简单SqlCommand而不是使用方式SqlDataAdapter:

    string insertStmt = "INSERT INTO [order](user_id, date) VALUES (@UserId, @Date); SELECT SCOPE_IDENTITY();";
    
    using (SqlCommand insertCmd = new SqlCommand(insertStmt, yourSqlConnection))
    {  
        insertCmd.Parameters.Add("@UserID", SqlDbType.Int).Value = xy;
        insertCmd.Parameters.Add("@Date", SqlDbType.DateTime).Value = DateTime.Now;
    
        yourSqlConnection.Open();
        int newID = (int)insertCmd.ExecuteScalar();
        yourSqlConnection.Close();
    }
    

    2023-02-07 19:56 回答
  • order是SQL中的保留字.如果您使用的是SQL Server,请使用方括号将其转义为[]:

    createorder = new SqlDataAdapter("INSERT INTO [order] (user_id, date) VALUES ('" + userno2 + "', '12-12-2013');select SCOPE_IDENTITY();", con);
    

    2023-02-07 19:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有