Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# 关闭读取器时调用元数据的尝试无效_C#_Visual Studio 2010 - Fatal编程技术网

C# 关闭读取器时调用元数据的尝试无效

C# 关闭读取器时调用元数据的尝试无效,c#,visual-studio-2010,C#,Visual Studio 2010,我收到一条错误消息: Invalid attempt to call MetaData when reader is closed. 并将其指向此代码: --> txtMname.Text = dr1["Crew_Mname"].ToString(); 下面的代码是我中间名的组合框,如果找到结果,它将填充所有必要的textboxex private void txtMname_SelectedIndexChanged(object sender, EventArgs e) {

我收到一条错误消息:

Invalid attempt to call MetaData when reader is closed.
并将其指向此代码:

--> txtMname.Text = dr1["Crew_Mname"].ToString();
下面的代码是我中间名的组合框,如果找到结果,它将填充所有必要的textboxex

private void txtMname_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtMname.Items.Clear();
        txtMname.Text = "";
        econ = new SqlConnection();
        econ.ConnectionString = emp_con;
        econ.Open();
        ecmd = new SqlCommand("SELECT Crew_Lname, Crew_Fname, Crew_Mname, Crew_Add1, Crew_Add2, Crew_Contact, Crew_Bdate, Rank_Name FROM CREW C, SKILL_RANK SR WHERE C.Rank_Id = SR.Rank_Id AND Crew_Lname like '" + Convert.ToString(txtLname.Text) + "%' AND Crew_Fname like '" + Convert.ToString(txtFname.Text) + "%'", econ);
        ecmd.CommandType = CommandType.Text;
        ecmd.Connection = econ;
        dr1 = ecmd.ExecuteReader();

        while (dr1.Read())
        {
            txtLname.Text = dr1["Crew_Lname"].ToString();
            txtFname.Text = dr1["Crew_Fname"].ToString();
            txtMname.Text = dr1["Crew_Mname"].ToString();
            txtAddress.Text = dr1["Crew_Add1"].ToString();
            txtAddress1.Text = dr1["Crew_Add2"].ToString();
            txtContact.Text = dr1["Crew_Contact"].ToString();
            dtpBdate.Text = dr1["Crew_Bdate"].ToString();
            comRank.Text = dr1["Rank_Name"].ToString();
        }
        econ.Close();
    }
还有一件事,每当我搜索同一个单词时,我也会得到同样的错误 e、 我搜索了 约翰

然后在我的数据库中有像约翰·迈克尔、约翰·艾曼纽这样的名字

当我在组合框中单击“John”一词时,会显示错误,并用John Michael的名字填充。。我该怎么办。。请帮忙。。我知道他们在我的代码中存在问题


谢谢大家。顺便说一句,我使用VS2010 C和SQL Server 2005

不知道,请尝试使用参数化查询并正确处理连接、命令和读卡器等一次性资源:

using (var con = new SqlConnection(emp_con))
using (var cmd = con.CreateCommand())
{
    con.Open();
    cmd.CommandText = 
    @"
        SELECT 
            Crew_Lname, 
            Crew_Fname, 
            Crew_Mname, 
            Crew_Add1, 
            Crew_Add2, 
            Crew_Contact, 
            Crew_Bdate, 
            Rank_Name 
        FROM  
            CREW C, 
            SKILL_RANK SR 
        WHERE 
            C.Rank_Id = SR.Rank_Id 
        AND 
            Crew_Lname LIKE @lName
        AND 
            Crew_Fname LIKE @fName
    ";
    cmd.Parameters.AddWithValue("@lName", txtLname.Text + "%");
    cmd.Parameters.AddWithValue("@fName", txtFname.Text + "%");
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            txtLname.Text = reader.GetString(reader.GetOrdinal("Crew_Lname"));
            txtFname.Text = reader.GetString(reader.GetOrdinal("Crew_Fname"));
            txtMname.Text = reader.GetString(reader.GetOrdinal("Crew_Mname"));
            txtAddress.Text = reader.GetString(reader.GetOrdinal("Crew_Add1"));
            txtAddress1.Text = reader.GetString(reader.GetOrdinal("Crew_Add2"));
            txtContact.Text = reader.GetString(reader.GetOrdinal("Crew_Contact"));

            // Remark: if the Crew_Bdate is a datetime field in your database
            // you should use reader.GetDateTime instead of reader.GetString
            dtpBdate.Text = reader.GetString(reader.GetOrdinal("Crew_Bdate"));

            comRank.Text = reader.GetString(reader.GetOrdinal("Rank_Name"));
        }
    }
}