296*_*349 2 c# asp.net web-deployment web
我正在使用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());
Run Code Online (Sandbox Code Playgroud)
当我尝试执行程序时,它会出错
关键字"order"附近的语法不正确.
有人可以帮我解决这个错误吗?
order是SQL中的保留字.如果您使用的是SQL Server,请使用方括号将其转义为[]:
createorder = new SqlDataAdapter("INSERT INTO [order] (user_id, date) VALUES ('" + userno2 + "', '12-12-2013');select SCOPE_IDENTITY();", con);
Run Code Online (Sandbox Code Playgroud)
ORDER 是T-SQL中的保留关键字.
要么不调用你的表ORDER,要么你需要用方括号"转义"名称:
INSERT INTO [order](user_id, date) VALUES ('" + userno2 + "', '12-12-2013');select SCOPE_IDENTITY();", con);
Run Code Online (Sandbox Code Playgroud)
另外:不要像这样把你的SQL语句串在一起!这非常容易受到 SQL注入攻击!
请改用参数化查询!
INSERT INTO [order](user_id, date) VALUES (@UserId, @Date);
SELECT SCOPE_IDENTITY();
Run Code Online (Sandbox Code Playgroud)
要只插入行并检索新插入的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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |