【发布时间】:2014-06-11 22:32:03
【问题描述】:
我有 3 个表:projects、managers 和 project_manager
经理
- manager_id (int, PK)
- 经理姓名
项目
- project_id (int, PK)
- 项目名称
project_manager
- project_id (int, PK)
- manager_id (int, PK)
假设经理当前已登录(因此我们知道 manager_id 是什么)并且他想通过在 txtName 文本框中输入名称来创建一个新的 Project并点击“创建”按钮。我试着写:
(1) 将新项目(名称)插入到 projects 表和
中的查询(2) 将 project_id 和 manager_id 插入 project_manager 表的单个查询
但在第三个查询字符串出现语法错误,这不是一个好方法,因为插入项目表(查询 1)可能会成功,但插入其他表(查询 2)可能会失败,我不太了解“高级”东西”的SQL,肯定需要帮助:
string CS = ConfigurationManager.ConnectionStrings["CTECS"].ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
string q1 = "SELECT COUNT(*) FROM [projects] WHERE project_name = @Name";
SqlCommand cmd = new SqlCommand(q1, con);
cmd.Parameters.AddWithValue("@Name", txtName.Text);
con.Open();
int i = (int)cmd.ExecuteScalar();
if (i < 1)
{
string Command = "INSERT INTO [dbo].[projects] (project_name) VALUES (@Name)";
cmd = new SqlCommand(Command, con);
cmd.Parameters.AddWithValue("@Name", txtName.Text);
cmd.ExecuteNonQuery();
Command = "INSERT INTO [project_manager] (project_id, manager_id) VALUES (SELECT project_id FROM [projects] WHERE project_name = @Name, @ID)";
cmd = new SqlCommand(Command, con);
// Provide the value for the parameter
cmd.Parameters.AddWithValue("@Name", txtName.Text);
cmd.Parameters.AddWithValue("@ID", currentUser.userID.ToString());
cmd.ExecuteNonQuery();
}
else
{
Panel1.Visible = true;
lblMessage.CssClass = "alert alert-error";
lblMessage.Text = "This project's name has been already used.";
return;
}
}
【问题讨论】:
-
不,这是对的,我的错..
标签: c# asp.net sql sql-server