Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在向导活动步骤中执行SQL插入?_C#_Sql_Sql Server_Aspwizard - Fatal编程技术网

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块中抛出异常

  • 我同意史蒂夫的观点。当可以覆盖需要处理的对象时,应该有using语句。那样的话,你就不需要记得去做了。这是为你处理的
  • sqlcommand对象有自己的开放连接。也许使用它有助于解决问题
  • 您确实也应该使用事务对象。当您输入多个数据段时,事务基本上是故障保护。例如假设您的向导在本例中有3个步骤,而步骤2失败。您可能不希望第1步被遗留下来。通过事务,您可以在出现错误时回滚更改
  • 第2节:

    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;