C# 如何在向导活动步骤中执行SQL插入?
在C# 如何在向导活动步骤中执行SQL插入?,c#,sql,sql-server,aspwizard,C#,Sql,Sql Server,Aspwizard,在asp:Wizard的第一步中,我使用DirectoryServices登录以进行身份验证。但是我想获取用户id,日期,以及范围标识(),并将其插入表中。这是我试过的。当我点击“下一步”时,信息不会被插入,但广告功能已被正确检查。我不确定我做错了什么 protected void OnActiveStepChanged(object sender, EventArgs e) { //check for the employee in AD string
asp:Wizard
的第一步中,我使用DirectoryServices
登录以进行身份验证。但是我想获取用户id
,日期
,以及范围标识()
,并将其插入表中。这是我试过的。当我点击“下一步”时,信息不会被插入,但广告功能已被正确检查。我不确定我做错了什么
protected void OnActiveStepChanged(object sender, EventArgs e)
{
//check for the employee in AD
string Domain = "mydomain.local";
string EmployeeID = txtEmpID.Text;
string Password = txtPassword.Text;
string ADStatus = null;
// If the ActiveStep is changing to Step2, check to see whether the
// user authenticated the AD Login Process. If it is, skip to the Step2 step.
if (Wizard1.ActiveStepIndex == Wizard1.WizardSteps.IndexOf(this.WizardStep2))
{
if (AuthenticateActiveDirectory(Domain, EmployeeID, Password) == true)
{
//If success ...
ADStatus = "Success";
Session["SessionADStatus"] = ADStatus;
string strDepartment = ddlDepartment.SelectedValue;
SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString);
SqlCommand cmd1 = new SqlCommand("INSERT INTO [pharm_OrderID](UserID, RequestType, CreateDate) values (@UserID, @RequestType, @CreateDate);", conn1);
cmd1.CommandType = CommandType.Text;
conn1.Open();
string strUserID = txtEmpID.Text;
cmd1.Parameters.Add("@UserID", SqlDbType.NVarChar, 50);
cmd1.Parameters["@UserID"].Value = strUserID;
string strRequestType = ddlReturnType.SelectedValue;
cmd1.Parameters.Add("@ReturnType", SqlDbType.NVarChar, 50);
cmd1.Parameters["@ReturnType"].Value = strRequestType;
string strCreateDate = lblOrderAttemptTime.Text;
cmd1.Parameters.Add("@CreateDate", SqlDbType.NVarChar, 50);
cmd1.Parameters["@CreateDate"].Value = strCreateDate;
conn1.Dispose();
cmd1.Dispose();
Wizard1.ActiveStepIndex = Wizard1.WizardSteps.IndexOf(this.WizardStep2);
}
else
{
ADStatus = "Failure";
Session["SessionADStatus"] = ADStatus;
lblADError.Visible = true;
lblADError.Text = "Unable to authenticate Employee ID or Password.";
Wizard1.ActiveStepIndex = Wizard1.WizardSteps.IndexOf(this.WizardStep1);
}
}
}
我不是AD专家,但需要执行命令才能产生任何结果 尝试添加
cmd1.ExecuteNonQuery();
在处理连接和命令之前
using(SqlConnection conn1 = new SqlConnection(........))
using(SqlCommand cmd1 = new SqlCommand("INSERT INTO [pharm_OrderID]" +
"(UserID, RequestType, CreateDate) " +
"values (@UserID, @RequestType, @CreateDate);", conn1))
{
conn1.Open();
string strUserID = txtEmpID.Text;
cmd1.Parameters.Add("@UserID", SqlDbType.NVarChar, 50);
cmd1.Parameters["@UserID"].Value = strUserID;
string strRequestType = ddlReturnType.SelectedValue;
cmd1.Parameters.Add("@ReturnType", SqlDbType.NVarChar, 50);
cmd1.Parameters["@ReturnType"].Value = strRequestType;
string strCreateDate = lblOrderAttemptTime.Text;
cmd1.Parameters.Add("@CreateDate", SqlDbType.NVarChar, 50);
cmd1.Parameters["@CreateDate"].Value = strCreateDate;
cmd1.ExecuteNonQuery();
}
Wizard1.ActiveStepIndex = Wizard1.WizardSteps.IndexOf(this.WizardStep2);
...
还添加了using语句以关闭连接并处理命令和连接。您应该始终使用此模式正确关闭连接,以防using块中抛出异常
cmd1.Connection.Open()代码>
而不是
conn1.Open();
第3节:
SqlTransaction transaction;
// Start a local transaction.
transaction = conn1.BeginTransaction("TheTransaction");
cmd1.Transaction = transaction;
然后就在你处理你的命令之前
transaction.Commit();
在错误块中(当您编写TryCatch或检测到某种错误时),您可以使用
请注意,您确实在sql插入开始时设置了成功状态。你真的应该在命令成功后
编辑:
在你的代码中。您可以在插入中引用requesttype
new SqlCommand("INSERT INTO [pharm_OrderID](...RequestType...) values (...@RequestType...
之后,您将使用一种称为returntype的方法
string strRequestType = ddlReturnType.SelectedValue;
cmd1.Parameters.Add("@ReturnType", SqlDbType.NVarChar, 50);
cmd1.Parameters["@ReturnType"].Value = strRequestType;
哪个是数据库的正确选项。这很可能是您的问题首先,从UI事件处理程序中取出数据层代码。如果您在事件处理程序中有该代码,则无法重用。这意味着您有一个与数据库交互的数据层(一组类),一个处理业务逻辑的业务层和一个作为前端的UI。
string strRequestType = ddlReturnType.SelectedValue;
cmd1.Parameters.Add("@ReturnType", SqlDbType.NVarChar, 50);
cmd1.Parameters["@ReturnType"].Value = strRequestType;